【问题标题】:PropertyNotFoundException: Could not find a getter for lastMoveDate in class com.hib.objects.GameBoardPropertyNotFoundException:在 com.hib.objects.GameBoard 类中找不到 lastMoveDate 的 getter
【发布时间】:2013-08-06 07:03:49
【问题描述】:

我已将类变量命名为camel casing。这是类,似乎是罪魁祸首。

import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import java.sql.Date;

public class GameBoard
{
    @Temporal(TemporalType.DATE)
    private Date lastMoveDate;

    /**
     * @return the lastMoveDate
     */
    public Date getLastMoveDate() {
        return lastMoveDate;
    }

    /**
     * @param lastMoveDate the lastMoveDate to set
     */
    public void setLastMoveDate(Date lastMoveDate) {
        this.lastMoveDate = lastMoveDate;
    }

}

该类还有几个其他变量,例如 playerOneFkplayerTwoFkgameLobbyFk(hibernate 能够跟踪这些变量上的每个 setter-getter,但会在 last_move_date 列中抛出异常)。

我还尝试了方法名称setlastMoveDategetlastMoveDate(没有运气..),lastMoveDate 的属性..

<property name="lastMoveDate" type="date" column="last_move_date" />

以及捕获的异常

SEVERE: Servlet.service() for servlet [authapi] in context with path [/TTTserver] threw exception [Servlet execution threw an exception] with root cause
org.hibernate.PropertyNotFoundException: Could not find a getter for lastMoveDate in class com.hib.objects.GameBoard
    at org.hibernate.property.BasicPropertyAccessor.createGetter(BasicPropertyAccessor.java:282)
    at org.hibernate.property.BasicPropertyAccessor.getGetter(BasicPropertyAccessor.java:275)
    at org.hibernate.mapping.Property.getGetter(Property.java:272)
    at org.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertyGetter(PojoEntityTuplizer.java:247)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:125)
    at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:55)
    at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:56)
    at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:295)
    at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:434)
    at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:109)
    at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55)
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:226)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
    at com.hib.objects.HibernateUtil.<clinit>(HibernateUtil.java:24)
    at nz.ac.massey.cs.capstone.auth.authapi.processRequest(authapi.java:42)
    at nz.ac.massey.cs.capstone.auth.authapi.doGet(authapi.java:74)

【问题讨论】:

  • 你需要正确设置你的休眠上下文。
  • 请显示您的包导入,以便我们查看您使用的日期类型。
  • @Vash 谢谢! :) 我也刚刚设置了上下文。

标签: java hibernate getter-setter


【解决方案1】:

在 Hibernate 中,属性类型“date”映射到 java.sql.Date。

如果您使用的是 java.util.Date,您会希望您的属性类型为“时间戳”。

现在使用“日期”会导致它查找在 java.sql.Date 上运行的 getter/setter,但它无法找到它。

请参阅Hibernate basic type reference(6.1.1.12 和 6.1.1.14)。

编辑:解决一些命名约定问题:

Hibernate 遵循标准 bean 命名约定:

  • 字段:someField
  • 属性:someField(与字段名称相同)
  • Getter:getSomeField() 或 isSomeField()(如果是布尔值)
  • 二传手:setSomeField()

【讨论】:

  • 谢谢! +1 代表,我将我的导入从 java.util.Date 更改为 java.sql.Date :) 一切正常!
【解决方案2】:

&lt;property name="LastMoveDate" type="date" column="last_move_date" /&gt;

应该可以...

【讨论】:

  • 谢谢,你知道为什么第一个字母是小写(而set-get后面的方法名也是小写)会抛出异常吗?
  • @Killrawr set-get 后的方法名以大写开头,属性名以小写开头。 Hibernate 与 bean 字段/setter/getter 名称的规则一致(someFieldgetSomeField()isSomeField()setSomeField())。我专门在 Hibernate 中使用这个命名约定——如果你观察到不同的东西,那很奇怪。
  • 我的 get-set 是从 netbeans refactor -&gt; encapsulate fields 生成的,这就是为什么我对为什么会发生这种情况有点困惑。
猜你喜欢
  • 2016-06-03
  • 1970-01-01
  • 2015-01-29
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多