Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我所有的字段都有前缀。我怎么能让它冬眠呢?_Java_Hibernate_Hibernate Annotations - Fatal编程技术网

Java 我所有的字段都有前缀。我怎么能让它冬眠呢?

Java 我所有的字段都有前缀。我怎么能让它冬眠呢?,java,hibernate,hibernate-annotations,Java,Hibernate,Hibernate Annotations,例如,我有: @Column(name = "username") private String m_username; 请注意,@Column注释只影响数据库列名 Hibernate仍然认为该属性的名称是“m_username” 如何告诉Hibernate属性名只是“username” 请告诉我有办法做到这一点 编辑:我在代码示例中删除了@AccessType注释,因为它与此问题无关 更新:将所有内容切换到字段访问后,会发生以下异常: org.hibernate.QueryExcep

例如,我有:

  @Column(name = "username")
  private String m_username;
请注意,@Column注释只影响数据库列名

Hibernate仍然认为该属性的名称是“m_username”

如何告诉Hibernate属性名只是“username”

请告诉我有办法做到这一点

编辑:我在代码示例中删除了@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();

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

为什么要使用
AccessType.PROPERTY

删除它,它将被“字段”访问


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

据我所知,我们不能*

hibernate
查找方法的方式仍然存在一个问题 对于
给定的属性名称

假设您有一个名为“mProperty”(第一个)的
属性
小写,第二个大写,其余不重要)。不是
存取器
源代码中的方法将是
getMProperty
setMProperty

BasicPropertyAccessor.getterMethod
就是这样实现的。

我在这里找到了一条线索:


但是这个线程已经7年了,我不知道如何将它应用到基于注释的配置中(我没有xml配置文件)。

真的不行吗?我不可能是唯一有这个要求的人。我不明白你想用“mProperty”这个例子说什么。在我的例子中,它将被定义为m_mProperty,并且访问器方法将被命名为getMProperty/setMProperty,正如您所说的(这在我看来是正确的).我提到:根据我的知识::在我的mProperty示例中,我只是告诉您BasicPropertyAccessor将如何获取geter方法。我想我现在明白了您想要告诉我的内容。我在某个论坛找到了一些建议子类化BasicPropertyAccessor的帖子(参见我自己对这个问题的回答)。也请检查一下,谢谢,但这似乎与数据库表/列名有关,@column注释已经解决了这个问题。这是因为我想要access type属性,但更喜欢在字段上指定注释。getter/setter是自动生成的(请参阅我的另一个问题:)@Zalumon为什么不能使用字段访问?它解决了两个问题,例如getter/setter的副作用。这也会解决你的问题。总之,持久化一个对象就是持久化它的内部状态。@Adam:事实上,我只是把所有东西都切换到了field access,看看是否能让它以那种方式工作,但我仍然有问题。我将用抛出的异常更新问题。