@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 或类层次结构中“集成”此字段。此外,fieldproperty 访问可能会导致您的设置出现问题。有关详细说明,请参阅此post。

在你的情况下,我可以想象你:

    实体继承策略中的混合字段和属性访问 在您的应用程序中使用基于 XML 的 Hibernate 配置。

在这两种情况下,JPA 2.0/2.1 specification 都在第 2.3.1 节中明确说明:

如果无法确定默认访问类型且未明确指定访问类型,则会出错 通过注释或 XML 描述符。 混合的应用程序的行为 实体层次结构中的字段和属性的注释,而无需明确指定 访问注释未定义。

请检查您的持久化 Entity 类是否具有基于 fieldproperty 的注释。

【讨论】:

【参考方案3】:

检查@Transient 注释的完全限定名称。 它可以来自任何一个, org.springframework.data.annotation.Transientjavax.persistence.Transient

尝试使用javax.persistence.Transient

【讨论】:

这是我的问题。以前的编码人员使用java.beans.Transient 对方法进行了注释,而该方法不需要注释,因为它的名称看起来不像getter 或setter。他的代码运行了,但是当我在一个看起来像 getter 的新方法上使用相同的注释时,代码失败了。我切换到javax.persistence.Transient 并且代码运行了。

以上是关于@Transient 不能在休眠状态下工作的主要内容,如果未能解决你的问题,请参考以下文章

kotlin 的 JPA:lazy 和 @Transient 不适用于休眠

Android4.4之后休眠状态下Alarm不准时的问题

Android4.4之后休眠状态下Alarm不准时的问题

电脑休眠怎么唤醒?

Linux设备驱动程序 之 休眠

@Transient 注解对方法意味着啥?