gpt4 book ai didi

java - 单个表的两个版本的 JPA 实体

转载 作者:太空宇宙 更新时间:2023-11-04 14:30:48 24 4
gpt4 key购买 nike

嗨,如何为单个表获取两个 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
}

在上面的实体中,可以看到一个具有两个集合的实体。如果您运行下面的 JPQL,这些实体将不会被加载。

select p from Person p where p.id = 33
// or
select p from Person p where p.name = 'uaiHebert'
为什么?所有具有任何类型“ Many”注释(@OneToMany 或 @ManyToMany)的实体都将被延迟加载。

什么是延迟加载?延迟加载意味着该属性在您使用之前不会从数据库加载。在上面的实体中,仅当调用 person.getEmailSet() 时才会加载电子邮件。

您不需要其他实体来加快数据库加载速度,您需要使用没有 EAGER 关系的 JPA。

如果您按如下方式设置 emailSet,则每次加载 Person 时,它的 emailSet 也会被加载。

    @OneToMany(fetch = FetchType.EAGER)
private Set<Email> emailSet;

请小心错误 LazyInitializationException,即,如果您在事务关闭的情况下调用 person.getEmailSet()。有关此异常的更多信息,请查看此链接:http://uaihebert.com/four-solutions-to-the-lazyinitializationexception/

关于java - 单个表的两个版本的 JPA 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26174411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com