Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一个表的两个JPA实体版本_Java_Sql_Hibernate_Jpa - Fatal编程技术网

Java 一个表的两个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

嗨,我如何为一个表获得两个JPA实体

我正在尝试实现一个没有任何连接的更轻版本(对于列表页)。 和一个包含所有映射的较重版本(用于查看详细信息页面)


例如,实体可以是“用户”,其中列表页面将仅显示来自用户表的记录,单击用户名将显示其他用户详细信息,从其他映射实体(如首选项等)获取记录。

查看以下实体:

@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;