【问题标题】:@Transient not working in hibernate@Transient 不能在休眠状态下工作
【发布时间】:2016-01-04 17:27:43
【问题描述】:

我使用的是休眠 4.1.9。 我的代码是

@Transient
private String ldapIdTemp;

包装是

import javax.persistence.Transient;

仍在休眠查询中,它不起作用并将属性放入查询中。

查询 sn-p 的一部分(assetasset0_.ldapIdTemp as ldapIdTemp16_0_, )

我不确定自己做错了什么。

【问题讨论】:

    标签: java hibernate transient


    【解决方案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

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

      1. 实体继承策略中的混合字段和属性访问
      2. 在您的应用程序中使用基于 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 并且代码运行了。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-28
        • 2019-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-30
        • 2011-07-20
        相关资源
        最近更新 更多