【问题标题】:All my fields have a prefix. How can I tell that to hibernate?我所有的字段都有一个前缀。我怎么能告诉它休眠?
【发布时间】:2013-02-16 22:48:55
【问题描述】:

例如我有:

  @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”的属性,而我想到它并针对一个名为“用户名”的属性进行编程。另请注意,我的 getter/setter 被称为:“getUsername()”和“setUsername(String value)”(自动生成)。

【问题讨论】:

    标签: java hibernate hibernate-annotations


    【解决方案1】:

    你为什么使用AccessType.PROPERTY

    删除它,它由“字段”访问。

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

    【讨论】:

    • 那是因为我想要访问类型属性,但更喜欢在字段上指定注释。 getter/setter 是自动生成的(请参阅我的另一个问题:stackoverflow.com/questions/14915606/…)。
    • @Zalumon 为什么不能使用字段访问?它解决了几个问题,例如。带有 getter/setter 副作用。它也会解决你的问题。总而言之,持久化一个对象就是持久化它的内部状态。
    • @Adam:实际上我只是将所有内容都切换到了字段访问,看看是否可以让它以这种方式工作,但我仍然遇到问题。我会用抛出的异常更新问题。
    【解决方案2】:

    据我所知,我们不能*。

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

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

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

    【讨论】:

    • 真的不行吗?我不能是唯一一个有这个要求的人。而且我不明白您要通过“mProperty”示例说什么。在我的例子中,它将被定义为 m_mProperty,访问器方法将被命名为 getMProperty/setMProperty,正如你所说的(这对我来说似乎是正确的)。
    • 我提到:据我所知:: 在我的 mProperty 示例中,我只是在讲述 BasicPropertyAccessor 将如何获取 geter 方法。
    • 我想我现在明白你想告诉我什么了。我在某处发现了一些论坛帖子,建议对 BasicPropertyAccessor 进行子类化(请参阅我自己对这个问题的回答)。
    • 谢谢,但这似乎与数据库表/列名有关,@Column 注释已经解决了这个问题。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-01-18
      • 2015-04-23
      • 2013-08-29
      • 2020-04-02
      • 1970-01-01
      • 2011-12-08
      • 2014-05-16
      • 2017-02-04
      • 2020-03-26
      相关资源
      最近更新 更多