我正在开发一个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.AccessType
,org.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
我不确定这是什么状态。有人有任何想法吗?
答案 0 :(得分:0)
好吧,我想我应该在这里给出一个答案,以防万一像我这样可怜的失落的灵魂在这里绊倒。
该问题仍未解决,自2012年4月起开放。我不希望它很快得到解决。是的,我一直在考虑提交一个可以解决问题的补丁。我还没到现在。我查看了hibernate的源代码,看起来整个代码库都处于一种变化之中。这些评论似乎表明为即将到来的Hibernate 5重构了很多东西。
然而,这不应该阻止我们勇敢的灵魂,对吧?好吧,我设法编写了一段代码,允许我使用Scala和Scala自己的getter-setter一起使用Hibernate,甚至可以毫不费力地使用Option
类型。
我无法真正解释这里的全部内容,因为它涉及黑客攻击Hibernate源代码并执行一些加载时间方面的魔术,以使其像我想要的那样工作。
尽管这可能看起来像是自我推广,但这里是我写的关于解决方案的link to the blog post,这里是展示示例的toy play framework project。