【问题标题】:Java Hibernate field access property or property based accessJava Hibernate 字段访问属性或基于属性的访问
【发布时间】:2014-04-25 14:32:51
【问题描述】:

我正在对遗留系统进行一些改进,有一段时间了

我有这样的课

class MyPersistentClazz
{
      private String aTPlace;
      public void setATPlace(.......){......}//yes mistyping    
      @Column(name="atPlaceOrder")
      public String getATPlace(){return aTPlace;}
}

他们通常使用这个方法加载这个类

final MyPersistentClazz clazz = (MyPersistentClazz)session.createCriteria(MyPersistentClazz.class).add(idEq(id)).uniqueResult();

并使用 loadget 方法并且工作正常。

但是当我使用投影时会出现问题。

final Projection p=Projections.projectionList().add(Projections.property("d.aTPlace"),"aTPlace");

抛出

Exception in thread "main" org.hibernate.QueryException: could not resolve property:

我的问题是……

当使用投影时,我认为 Hibernate 正在调用每个属性的设置器,这个断言可以吗?

当使用 criteria.uniqueResult 或加载或获取 Hibernate 时使用单个字段属性访问?

或者为什么使用相同的二传手与某些人一起工作而不与其他人一起工作?

我们只使用注释而不是 XML。

非常感谢。

【问题讨论】:

    标签: java hibernate projection


    【解决方案1】:

    Hibernate 如何处理您的 bean 取决于您如何注释它。如果您注释实例变量,那么 Hibernate 将使用直接注入并绕过您的 Set 方法。否则,它将使用您的 Set 方法。

    可能是它错误地将您的属性名称转换为 Set 方法名称?尝试将属性名称更改为更简单的名称(不包含一系列大写字母),并确保投影中属性的大小写正确。

    【讨论】:

    • 嘿 phil... 是的,事实上现在正在工作.. 正确设置 setter 和 getter... 我发布这个问题是因为对我来说很奇怪,我想了解.. 请检查我的编辑问题我们使用的是注解而不是 XML
    • 我没有假设或提及 XML。如果您注释 get 方法而不是属性,那么 Hibernate 将使用 get/set。但是我没有明确说明这一点,因为没有人对方法进行注释......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多