Hibernate的AttributeAccessor和PropertyAccessor组合不起作用

时间:2014-10-26 12:18:50

标签: hibernate

我正在开发一个scala项目,我正在使用Hibernate进行持久化。使用实体映射,我想使用标准的scala getter / setter对,这样我就不必编写正常的java getter / setter对。

使用AccessType.FIELD有效。我知道我可以使用@BeanProperty来生成bean方法。但是,我仍然想知道为什么我的配置不起作用。

我正在使用hibernate 4.3.6.Final。尝试使用@AttributeAccessor注释并不会产生任何结果。也就是说,Hibernate默认为自己的内部PropertyAccessor实现。我的自定义PropertyAccessor甚至没有被调用。我一直在寻找几个小时,似乎Hibernate不再支持此功能 。这真的很奇怪,因为AttributeAccessor本身似乎是最近加入hibernate的。此外,Steve Ebersole的this piece of documentation告诉我,我的方式正确。

我尝试了@org.hibernate.annotations.AccessTypeorg.hibernate.annotations.AttributeAccessor@javax.persistence.Access的多种组合。对于前。

@AttributeAccessor("persistence.property.ScalaPropertyAccessor")
@org.hibernate.annotations.AccessType("persistence.property.ScalaPropertyAccessor")
class User {
    // ...
}

此外,还有一个未解决的问题:https://hibernate.atlassian.net/browse/HCANN-48

我不确定这是什么状态。有人有任何想法吗?

1 个答案:

答案 0 :(得分:0)

好吧,我想我应该在这里给出一个答案,以防万一像我这样可怜的失落的灵魂在这里绊倒。

该问题仍未解决,自2012年4月起开放。我不希望它很快得到解决。是的,我一直在考虑提交一个可以解决问题的补丁。我还没到现在。我查看了hibernate的源代码,看起来整个代码库都处于一种变化之中。这些评论似乎表明为即将到来的Hibernate 5重构了很多东西。

然而,这不应该阻止我们勇敢的灵魂,对吧?好吧,我设法编写了一段代码,允许我使用Scala和Scala自己的getter-setter一起使用Hibernate,甚至可以毫不费力地使用Option类型。

我无法真正解释这里的全部内容,因为它涉及黑客攻击Hibernate源代码并执行一些加载时间方面的魔术,以使其像我想要的那样工作。

尽管这可能看起来像是自我推广,但这里是我写的关于解决方案的link to the blog post,这里是展示示例的toy play framework project