Java 一个表的两个JPA实体版本
嗨,我如何为一个表获得两个JPA实体 我正在尝试实现一个没有任何连接的更轻版本(对于列表页)。 和一个包含所有映射的较重版本(用于查看详细信息页面)Java 一个表的两个JPA实体版本,java,sql,hibernate,jpa,Java,Sql,Hibernate,Jpa,嗨,我如何为一个表获得两个JPA实体 我正在尝试实现一个没有任何连接的更轻版本(对于列表页)。 和一个包含所有映射的较重版本(用于查看详细信息页面) 例如,实体可以是“用户”,其中列表页面将仅显示来自用户表的记录,单击用户名将显示其他用户详细信息,从其他映射实体(如首选项等)获取记录。查看以下实体: @Entity public class Person { @Id private int id; private int age; private String
例如,实体可以是“用户”,其中列表页面将仅显示来自用户表的记录,单击用户名将显示其他用户详细信息,从其他映射实体(如首选项等)获取记录。查看以下实体:
@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
}
为什么??具有任何类型的“Many”注释(@OneToMany或@ManyToMany)的所有实体都将被延迟加载
什么是惰性负载?Lazy Loaded意味着在使用该属性之前,不会从数据库中加载该属性。在上面的实体中,只有在调用person.getEmailSet()
时才会加载电子邮件
您不需要其他实体来更快地加载数据库,您需要使用JPA而不需要迫切的关系
如果您像下面那样设置电子邮件集
,则每次加载某人时,其电子邮件集
也将加载
@OneToMany(fetch = FetchType.EAGER)
private Set<Email> emailSet;
@OneToMany(fetch=FetchType.EAGER)
专用集;
注意LazyInitializationException错误,即在事务关闭时调用
person.getEmailSet()
。有关此异常的更多信息,请查看此链接:最好创建一个视图并将其映射到该视图。为什么需要两个实体来执行此操作?你知道关联可以被延迟加载,对吗?我想需要两个实体来实现这一点。。但我想知道这方面的其他可能性。如果你正在寻找一个更轻的版本,你可以看看投影。
@OneToMany(fetch = FetchType.EAGER)
private Set<Email> emailSet;