2013-02-16 23 views
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',而我想到它,并针对名为'用户名'的属性进行编程。还要注意我的getter/setter被调用:“getUsername()”和“setUsername(String value)”(自动生成)。

回答

0

为什么使用AccessType.PROPERTY

删除它,它是由'字段'访问。

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

+0

这是因为我想访问类型属性,但更喜欢指定字段上的注释。 getters/setter是自动生成的(参见我的另一个问题:http://stackoverflow.com/questions/14915606/how-can-i-place-the-hibernate-annotations-on-the-fields-but-always-have -propert)。 – Zalumon 2013-02-16 23:17:08

+0

@Zalumon为什么你不能使用字段访问?它解决了一些问题,例如。与getter/setter副作用。它也可以解决你的问题。总而言之,坚持一个对象就是坚持它的*内部*状态。 – 2013-02-18 10:27:59

+0

@Adam:其实我只是把所有东西都切换到了字段访问,看看我能否以这种方式工作,但我仍然有问题。我将用抛出的异常来更新这个问题。 – Zalumon 2013-02-18 10:35:19

0

根据我的知识,我们不能*。

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

假设你有一个名为“mProperty”的property(第一个 小写字母,第二个大写字母,其余不重要)。不是源代码中的accessor 方法将是getMPropertysetMProperty

方式BasicPropertyAccessor.getterMethod以这种方式实现。

+0

真的没办法?我不能成为唯一有此要求的人。我不明白你想用“mProperty”例子说什么。在我的情况下,它将被定义为m_mProperty,并且访问器方法将被命名为getMProperty/setMProperty,如您所说(这对我来说似乎是正确的)。 – Zalumon 2013-02-16 23:12:13

+0

我提到:根据我的知识::在我的mProperty示例中,我只是告诉BasicPropertyAccessor如何获取geter方法。 – 2013-02-16 23:20:54

+0

我想我现在明白你想告诉我什么。我在某处发现了一些论坛线索,建议子类化BasicPropertyAccessor(请参阅我自己对此问题的回答)。 – Zalumon 2013-02-18 10:45:13

相关问题