Hibernate-字段延迟抓取

Hibernate-字段延迟抓取,hibernate,lazy-loading,hibernate-mapping,Hibernate,Lazy Loading,Hibernate Mapping,如何添加限制以仅从实体加载所需字段? 具有CustomerUser OneTONE映射的我的用户表和具有用户作为OneTONE映射的事务表 所以,当我加载事务时,它会加载用户和相应的客户,但我不想从customeruser表加载密码和其他一些文件。 (Hibernate版本4.2.6)您可以使用 @Basic(fetch = FetchType.LAZY) 但要在字段上工作,必须启用Hibernates字节码增强器() org.hibernate.orm.tooling hibernate增

如何添加限制以仅从实体加载所需字段? 具有CustomerUser OneTONE映射的我的用户表和具有用户作为OneTONE映射的事务表 所以,当我加载事务时,它会加载用户和相应的客户,但我不想从customeruser表加载密码和其他一些文件。
(Hibernate版本4.2.6)

您可以使用

@Basic(fetch = FetchType.LAZY)
但要在字段上工作,必须启用Hibernates字节码增强器()


org.hibernate.orm.tooling
hibernate增强maven插件
${hibernate.version}
真的
真的
真的
编译
增强
另一种方法是将两个实体映射到同一个表。与CustomerUser一样,CustomerUser可以映射始终加载的所有字段,但CustomerPassword本身只有id和密码。然后,您将仅在需要时从服务/存储库加载密码实体


在他们修复懒惰属性票据之前,这是一个常见的解决方法。花了大约3年的时间:P.

你可以用

@Basic(fetch = FetchType.LAZY)
但要在字段上工作,必须启用Hibernates字节码增强器()


org.hibernate.orm.tooling
hibernate增强maven插件
${hibernate.version}
真的
真的
真的
编译
增强
另一种方法是将两个实体映射到同一个表。与CustomerUser一样,CustomerUser可以映射始终加载的所有字段,但CustomerPassword本身只有id和密码。然后,您将仅在需要时从服务/存储库加载密码实体


在他们修复懒惰属性票据之前,这是一个常见的解决方法。花了大约3年时间:P.

您需要做的是编写Json注释并获取类型。 e、 g:

FetchType.LAZY
不会自动加载类
@JsonIgnore
阻止要在json中的类

或者

假设您希望加载CustomerUser及其所有变量(密码除外)。您需要做的是向password变量添加
@JsonIgnore

public class User {
       ....
      @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
      @JsonManagedReference
      private CustomerUser customerUser;
      ....
}

public class CustomerUser {

       @Column(name = "username")
       private String username;

       @Column(name = "password")
       @JsonIgnore
       private String password;
       ......
       ...getters/setters
}

您需要做的是编写Json注释和获取类型。 e、 g:

FetchType.LAZY
不会自动加载类
@JsonIgnore
阻止要在json中的类

或者

假设您希望加载CustomerUser及其所有变量(密码除外)。您需要做的是向password变量添加
@JsonIgnore

public class User {
       ....
      @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
      @JsonManagedReference
      private CustomerUser customerUser;
      ....
}

public class CustomerUser {

       @Column(name = "username")
       private String username;

       @Column(name = "password")
       @JsonIgnore
       private String password;
       ......
       ...getters/setters
}

你正在用json加载事务吗?是的,我正在获取json数据。你正在用json加载事务吗?是的,我正在获取json数据。但是现在我的项目变得如此庞大,以至于我甚至无法触摸我的pojo设计。CustomerUser被用于很多功能。据我所知,Hibernate除了这两种功能之外没有其他方法。您可能很快就会发现EntityGraph和NamedEntityGraph javax.persistence注释,但这些注释不是用于Hibernate中的字段/属性,而是用于连接的实体。但现在我的项目变得如此庞大,我甚至不能触摸我的pojo设计。CustomerUser被用于许多功能中。据我所知,Hibernate除了这两种功能之外没有其他方法。您可能很快就会找到EntityGraph和NamedEntityGraph javax.persistence注释,但这些注释不是用于Hibernate中的字段/属性,而是用于连接的实体。有趣的是,因此,您将表转换为回答序列化问题,而不是映射问题。他希望使用延迟加载并以json格式加载事务。我解释了映射和序列化,当然你是对的,是的,如果你忽略了问题中的惰性字段部分,并且假设仅仅在序列化中排除它就足够了,那么这将是合适的方法。但问题是如何不加载它,而不是如何不序列化它。有趣的是,因此您翻表回答了一个序列化问题,而不是映射问题。他希望使用延迟加载并以json格式加载事务。我解释了映射和序列化,当然你是对的,是的,如果你忽略了问题中的惰性字段部分,并且假设仅仅在序列化中排除它就足够了,那么这将是合适的方法。但问题是如何不加载它,而不是如何不序列化它。