我有这些实体:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Item implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false)
@NotNull
private String title;
@Column(nullable = false)
@NotNull
private Integer price;
}
@Entity
public class Book extends Item implements Serializable{
@Column(nullable = false)
@NotNull
private String isbn;
@Column(nullable = false)
@NotNull
private String language;
}
我的问题是:
对于Namedquery,我必须将它们放在项目实体或书籍实体中吗?
例如,如果我必须搜索price = 30的书,这个命名查询必须在超类或子类中吗?
我们知道我们将在数据库Item中有一个表,如何使用这种架构管理jpql。
编辑: 如果我有这个问题:搜索价格= 30的书,
我可以用这个命名查询回复:
@NamedQuery(name=Book.FIND_BY_PRICE,query="select b from Book b where b.price = :bprice")
或:
@NamedQuery(name=Book.FIND_BY_PRICE,query="select i from Item i where i.dtype='book' and i.price = :bprice")
答案 0 :(得分:0)
您将命名查询放在您想要的任何实体类中。由于命名查询是关于寻找书籍,我会把它放在书籍实体中。
关于JPQL查询,您可以将它们编写为任何其他JPQL查询:使用实体名称和字段,并让JPA实现生成适当的SQL,这要归功于它们对映射和继承关系的了解。
我要做的第一件事就是将item类重命名为Item,以尊重Java命名约定。