0

例如我有:

  @Column(name = "username")
  private String m_username;

请注意,@Column 注释只影响数据库列名。

Hibernate 仍然认为属性的名称是'm_username'。

如何告诉 Hibernate 属性名称只是“用户名”?

请告诉我有一种方法可以做到这一点......

编辑:我在我的代码示例中删除了 @AccessType 注释,因为它与这个问题无关。

更新:将所有内容切换到字段访问后,会发生此异常:

org.hibernate.QueryException: could not resolve property: username of: mypackage.model.User

它发生在这里:

Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.eq("username", username));
User result = (User) criteria.uniqueResult();

原因很可能是休眠只“知道”名为“m_username”的属性,而我想到它并针对名为“username”的属性进行编程。另请注意,我的 getter/setter 被称为:“getUsername()”和“setUsername(String value)”(自动生成)。

4

3 回答 3

0

据我所知,我们不能*。

hibernate查找 a 的方法的方式仍然存在一个问题given property name

假设您有一个property类似“mProperty”的名称(第一个小写,第二个大写,其余无关紧要)。不是accessor 源代码中的方法将是getMPropertyand setMProperty

方式BasicPropertyAccessor.getterMethod就是这样实现的。

于 2013-02-16T23:00:31.187 回答
0

我在这里找到了一条线索:https ://forum.hibernate.org/viewtopic.php?f=1&t=943110

但是该线程已有 7 年历史,我不知道如何将其应用于基于注释的配置(我没有 xml 配置文件)。

于 2013-02-18T10:24:49.107 回答
0

你为什么用AccessType.PROPERTY

删除它,它可以通过“字段”访问。

不要混合字段和属性注释。坚持一个或另一个。

于 2013-02-16T22:54:24.623 回答