Hibernate-字段延迟抓取
如何添加限制以仅从实体加载所需字段? 具有CustomerUser OneTONE映射的我的用户表和具有用户作为OneTONE映射的事务表 所以,当我加载事务时,它会加载用户和相应的客户,但我不想从customeruser表加载密码和其他一些文件。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增
(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格式加载事务。我解释了映射和序列化,当然你是对的,是的,如果你忽略了问题中的惰性字段部分,并且假设仅仅在序列化中排除它就足够了,那么这将是合适的方法。但问题是如何不加载它,而不是如何不序列化它。