我的实体的实现已生成,我几乎无法控制它。我面临的主要问题是布尔字段getter方法有不同的命名约定:is<FieldName>()
。
public class Bookmark {
/**
* @generated
*/
public boolean isIsPrivate() {
...
}
/**
* @generated
*/
public void setIsPrivate(boolean newIsPrivate) {
...
}
}
特定的实现缺乏实体上的实际字段,我知道这听起来很疯狂,但事实就是如此。因此,我需要使用PROPERTY访问权限。由于我无法修改代码的生成方式,因此我在orm.xml映射文件中执行此操作:
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/orm http://xmlns.jcp.org/xml/ns/persistence/orm_2_1.xsd">
<persistence-unit-metadata>
<xml-mapping-metadata-complete/>
</persistence-unit-metadata>
<package>org.hibernate.ogm.backendtck.type.ogmemf.impl</package>
...
<entity class="Bookmark" access="PROPERTY">
<attributes>
<basic name="isPrivate"/>
</attributes>
</entity>
</entity-mappings>
但是,这会导致hiberante查找不存在的getIsPrivate()
方法。
由于我需要使用PROPERTY访问但我的get方法不遵循JavaBeens约定,有没有什么方法可以说服hiberante寻找特定的方法或模式,以便我可以映射is<FieldName>()
方法?
答案 0 :(得分:1)
根据JPA规范第2.2节
In this case, for every persistent property property of type T of the
entity, there is a getter method, getProperty, and setter method
setProperty. For boolean properties, isProperty may be used as an
alternative name for the getter method. [2]
For single-valued persistent properties, these method signatures are:
• T getProperty()
• void setProperty(T t)
由于您的属性是布尔值,因此isProperty
是有效名称,您的JPA提供程序应该观察它。如果它没有,那么你应该在它上面提出一个错误。