Построение 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)

Другие вопросы по тегам