[英]Avoid unnecessary fetches in @onetomany join
I have two classes mapped to two different tables in DB. 我有两个类映射到数据库中的两个不同表。 For example ,
例如 ,
@Entity
@Table(schema = "schema", name = "tableA")
public class ClassA{
@Id
@Column(name = "id", columnDefinition = "serial")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private BigInteger id;
@Column(name="title")
private String title;
@Column(name="first_name")
private String firstName;
@Column(name="middle_name")
private String middleName;
@Column(name="last_name")
private String lastName;
@Column(name ="updater")
private BigInteger updaterId;
@OneToOne(targetEntity=UserBean.class, fetch=FetchType.EAGER)
@JoinColumn(name="updated_by",referencedColumnName="employee_number",insertable=false ,updatable=false)
private User updatedDetails;
//getter setter
}
I have the User class as follows 我有如下的User类
@Entity
@Table(schema = "schema", name = "User")
public class User{
@Id
@Column(name = "id", columnDefinition = "serial")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private BigInteger id;
@Column(name="title")
private String title;
@Column(name="first_name")
private String firstName;
@Column(name="middle_name")
private String middleName;
@Column(name="last_name")
private String lastName;
//getter setters }
Now when I fetch the ClassA objects through ("From ClassA"), I am getting the corresponding User class objects also. 现在,当我通过(“从ClassA”获取)ClassA对象时,我也正在获取相应的User类对象。 Now my question is how do I ignore the unnecessary properties of the User class.
现在,我的问题是如何忽略User类的不必要属性。
For example, I want to ignore middleName and lastName properties of User class. 例如,我想忽略User类的middleName和lastName属性。 I have to restrict Hibernate from reading these two columns while joining.
我必须限制Hibernate在加入时阅读这两列。 How do I do that?
我怎么做?
I am using Spring + Hibernate. 我正在使用Spring + Hibernate。
Just change following line to Load Entity lazily 只需将以下行更改为延迟加载实体
@OneToOne(targetEntity=UserBean.class, fetch=FetchType.EAGER)
to 至
@OneToOne(targetEntity=UserBean.class, fetch=FetchType.LAZY)
and read about FetchType.EAGER VS FetchType.LAZY 并阅读有关FetchType.EAGER与FetchType.LAZY的信息
If you want to Load Field of an entity Lazily you can use @Basic(fetch=FetchType.LAZY)
annotation on fields which you want load lazily . 如果要延迟加载实体的字段,则可以在要延迟加载的字段上使用@Basic
@Basic(fetch=FetchType.LAZY)
批注。
@Basic(fetch=FetchType.LAZY)
@Column(name="first_name")
private String firstName;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.