Mar*_*rcG 7 java hibernate jpa hibernate-envers jpa-2.1
我正在使用带有Envers的Hibernate 4.3.4和MySql 5.6.
如果没有JPA 2.1转换器,Party下面的实体就会失败Configuration.buildSessionFactory(),因为Hibernate不知道如何处理Name类:
@Entity
@Audited
public class Party
    {
    protected Name name;
    ...
    }
例外是:
org.hibernate.MappingException: 
  Could not determine type for: 
    ModuloADM.Party.Name, 
    at table: Party, for columns: [org.hibernate.mapping.Column(name)]
要解决此问题,我然后添加此转换器:
@Converter (autoApply=true)
public class NametoStringConverter
      implements AttributeConverter<Name, String>
    { ... }
现在异常变为:
org.hibernate.MappingException: 
  Could not determine type for: 
    BasicType adapter for AttributeConverter<Name,String>, 
    at table: History_Party, for columns: [org.hibernate.mapping.Column(name)]
现在,在Party实体的Envers审核表中失败了.请注意,这History_Party是审计表的名称,由选择config.setProperty("org.hibernate.envers.audit_table_prefix", "History_").
完整的堆栈跟踪是:
org.hibernate.MappingException: 
  Could not determine type for: 
    BasicType adapter for AttributeConverter<Name,String>, 
    at table: History_Party, for columns: [org.hibernate.mapping.Column(name)]
  at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:336)
    at org.hibernate.tuple.PropertyFactory.buildEntityBasedAttribute(PropertyFactory.java:246)
    at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:227)
    at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:520)
    at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:148)
    at sun.reflect.GeneratedConstructorAccessor43.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:163)
    at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:135)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:401)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1857)
我该如何解决这个问题?Envers甚至与AttributeConverters兼容吗?
尝试在Party实体中使用@Convert。有时autoApply标志不起作用
@Entity
@Audited
public class Party
    {
    @Convert(converter = NametoStringConverter.class)
    protected Name name;
    ...
    }
| 归档时间: | 
 | 
| 查看次数: | 6780 次 | 
| 最近记录: |