我需要编写两个不同但相似的JPQL查询,目前缺乏专业知识。我真的希望有人可以提供帮助。
其他问题:
我的代码:
@Entity
@NamedQueries({
@NamedQuery(name = Item.FIND_ALL, query = "select i from Item i")
})
@TableGenerator(name = "Item_ID_Generator", table = "ITEM_ID_GEN", pkColumnName = "PRIMARY_KEY_NAME",
pkColumnValue = "Item.id", valueColumnName = "NEXT_ID_VALUE")
public class Item implements Serializable {
public static final String FIND_ALL = "Item.findAll";
// private static final long serialVersionUID = 1L;
@Id
@Column(nullable = false)
@GeneratedValue(strategy = GenerationType.TABLE, generator = "Item_ID_Generator")
private Integer id;
@ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.REMOVE})
@JoinTable(name = "jnd_item_tag",
joinColumns = @JoinColumn(name = "item_fk"),
inverseJoinColumns = @JoinColumn(name = "tag_fk"))
private List<Tag> tags = new ArrayList();
}
@Entity
public class Tag implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(unique = true)
private String keyword;
@ManyToMany(mappedBy = "tags")
private List<Item> referencedByItem;
}
答案 0 :(得分:0)
执行以下查询,该查询将返回匹配的标记集和匹配的标记:
SELECT i, t FROM Item i JOIN i.tags t WHERE t.keyword IN :listOfTags
我的情况可以这样:
@NamedQuery(name = "selectByTags", query = "SELECT i, t FROM Item i JOIN i.tags t WHERE t.keyword IN :listOfTags")
//and here you need set your list
List<Tag> tags = daoTags.getListTags();
query.setParameter("listOfTags", listOfTags);
我认为调整此查询可以解决您的问题的两个请求。