@Transient 不能在休眠状态下工作
Posted
技术标签:
【中文标题】@Transient 不能在休眠状态下工作【英文标题】:@Transient not working in hibernate 【发布时间】:2016-01-04 17:27:43 【问题描述】:我使用的是休眠 4.1.9。 我的代码是
@Transient
private String ldapIdTemp;
包装是
import javax.persistence.Transient;
仍在休眠查询中,它不起作用并将属性放入查询中。
查询 sn-p 的一部分(assetasset0_.ldapIdTemp as ldapIdTemp16_0_, )
我不确定自己做错了什么。
【问题讨论】:
【参考方案1】:能否尝试为该字段创建setter和getter,并用@Transient
注释get方法,如下:
private String ldapIdTemp;
@Transient
public String getLdapIdTemp()
return ldapIdTemp;
public void setLdapIdTemp(String ldapIdTemp)
this.ldapIdTemp = ldapIdTemp;
【讨论】:
【参考方案2】:很大程度上取决于您如何在Entity
或类层次结构中“集成”此字段。此外,field 与 property 访问可能会导致您的设置出现问题。有关详细说明,请参阅此post。
在你的情况下,我可以想象你:
-
实体继承策略中的混合字段和属性访问
在您的应用程序中使用基于 XML 的 Hibernate 配置。
在这两种情况下,JPA 2.0/2.1 specification 都在第 2.3.1 节中明确说明:
如果无法确定默认访问类型且未明确指定访问类型,则会出错 通过注释或 XML 描述符。 混合的应用程序的行为 实体层次结构中的字段和属性的注释,而无需明确指定 访问注释未定义。
请检查您的持久化 Entity
类是否具有基于 field 或 property 的注释。
【讨论】:
【参考方案3】:检查@Transient
注释的完全限定名称。
它可以来自任何一个,
org.springframework.data.annotation.Transient
或 javax.persistence.Transient
。
尝试使用javax.persistence.Transient
。
【讨论】:
这是我的问题。以前的编码人员使用java.beans.Transient
对方法进行了注释,而该方法不需要注释,因为它的名称看起来不像getter 或setter。他的代码运行了,但是当我在一个看起来像 getter 的新方法上使用相同的注释时,代码失败了。我切换到javax.persistence.Transient
并且代码运行了。以上是关于@Transient 不能在休眠状态下工作的主要内容,如果未能解决你的问题,请参考以下文章