Построение Spring Data Query с использованием имени метода и параметра объекта
Мне было интересно, можно ли было не использовать аннотацию @Query и позволить Spring Data построить JPA-запрос на основе имени моего метода и параметров метода для приведенной ниже взаимосвязи сущностей. Я хочу получить список ItemLocations, которые связаны с конкретным Item. Я попробовал приведенную ниже подпись, и она не работала без @Query. Также правильнее (эффективнее / эффективнее) передавать Item.id вместо самого объекта Item?
Версия данных Spring: 1.3.4.RELEASE
API репозитория данных рабочей пружины:
@Query("FROM ItemLocation where item = ?")
public List<ItemLocation> getAllItemLocations(Item item);
API требуемого Spring Data Repository:
public List<ItemLocation> findAllItemLocations(Item item);
JPA Enties:
@Entity
public class ItemLocation {
@ManyToOne
@JoinColumn(name="fk_item_id")
public Item getItem() {
return this.item;
}
public void setItem(Item item) {
this.item = item;
}
@Id
@GeneratedValue
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
private Item item;
private long id;
}
@Entity
public class Item {
@OneToMany(mappedBy="item", orphanRemoval=true)
@Cascade({org.hibernate.annotations.CascadeType.PERSIST})
public Set<ItemLocation> getItemLocationList() {
return this.itemLocationList;
}
public void setItemLocationList(Set<ItemLocation> list) {
this.itemLocationList = list;
}
@Id
@GeneratedValue
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
private Set<ItemLocation> itemLocationList
= new HashSet<ItemLocation>();
private long id;
}
1 ответ
public List<ItemLocation> findAllByItem(Item item);
(в репозитории ItemLocationRepository)