如何为JPA 2实体定义默认访问类型

时间:2011-06-01 16:13:23

标签: java hibernate jpa

由于Hibernate JPA 2 Meta Model Generator的一些奇怪行为,我需要将所有实体的访问类型设置为AccessType.FIELD。 - 因为我不想在每个类中添加@Access注释,而是要求设置默认访问类型的方法。

到目前为止,我尝试使用此orm.xml

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
    http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
    version="2.0">

    <persistence-unit-metadata>
        <persistence-unit-defaults>
            <access>FIELD</access>
        </persistence-unit-defaults>        
    </persistence-unit-metadata>

但这似乎被忽略了,生成器默认使用PROPERTY访问。

当我将这些行添加到{{orm.xml}}时:

<access>FIELD</access>
<entity class="domain.Banner"></entity>
<entity class="domain.Stuff"></entity>
...

生成器开始支持对字段(而不是属性)的尊重,但这比注释方式更糟糕。

所以我的问题是:如何设置默认的AccessType?

1 个答案:

答案 0 :(得分:0)

您是否设法找到问题的解决方案?我不确定hibernate和JPA是否支持此功能,但您可以使用包级注释。以下是http://www.ctrlspace.ca/?p=10

中类型定义的示例
@TypeDefs({ @TypeDef(name = "trim", typeClass = TrimmedString.class) })  
@FilterDefs({  
@FilterDef(name = "ACTIVE_FILTER", defaultCondition = "((end_date is null) or (end_date >= current_date))"),  
@FilterDef(name = "HISTORICAL_FILTER", defaultCondition = "(end_date < current_date)")})  
package com.ctrlspace.model;  

import org.hibernate.annotations.FilterDef;
import org.hibernate.annotations.FilterDefs;  
import org.hibernate.annotations.TypeDef;  
import org.hibernate.annotations.TypeDefs;  

import com.ctrlspace.type.TrimmedString;