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,看看是否能让它以那种方式工作,但我仍然有问题。我将用抛出的异常更新问题。