您好如何为单个表格获得两个JPA实体。
我正在尝试使用任何联接(对于列表页面)实现一个更轻的版本。 和所有映射的一个更重的版本(For View Details Page)。
例如,实体可以是“用户”,其中“列表”页面仅显示“用户表”中的记录,单击“用户名”将显示其他用户详细信息,其中它从其他映射实体(如“首选项”等)中获取记录。
答案 0 :(得分:0)
看看下面的实体:
@Entity
public class Person {
@Id
private int id;
private int age;
private String name;
@OneToMany
private Set<Email> emailSet;
@ManyToMany
private Set<Person> childrenSet;
// get and set
}
在上面的实体中,可以看到具有两个集合的实体。如果您运行下面的JPQL,则不会加载这些实体。
select p from Person p where p.id = 33
// or
select p from Person p where p.name = 'uaiHebert'
为什么呢?所有具有&#39; 许多&#39;的实体注释(@OneToMany或@ManyToMany)将被延迟加载。
什么是懒加载?延迟加载意味着在您使用该属性之前不会从数据库加载该属性。在上面的实体中,只有在调用person.getEmailSet()
时才会加载电子邮件。
您不需要其他实体来加快数据库加载速度,您需要在没有EAGER关系的情况下使用JPA。
如果您设置如下所示的emailSet
,则每次加载人员时,其emailSet
也会被加载。
@OneToMany(fetch = FetchType.EAGER)
private Set<Email> emailSet;
注意错误LazyInitializationException,即如果在事务关闭时调用person.getEmailSet()
。有关此例外的详细信息,请查看以下链接:http://uaihebert.com/four-solutions-to-the-lazyinitializationexception/