简体   繁体   English

避免在@onetomany加入中不必要的获取

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM