2016-01-06 85 views
0

(JPA 2.1 /休眠4.3.7):Hibernate不与@Id和@Convert或@Converter枚举(自动应用=真)与一些</p> <pre><code>public class SomeDao { @Id private MyEnum id; public MyEnum getId() { return id; } } @Converter(autoApply=true) public MyEnumConv { ... } </code></pre> <p>你会得到类似的东西工作

org.postgresql.util.PSQLException: Unzulässiger Wert für den Typ int : enumDbStrX. 
    at org.postgresql.jdbc2.AbstractJdbc2ResultSet.toInt(AbstractJdbc2ResultSet.java:2955) ~[postgresql-9.3-1102-jdbc41.jar:na] 
    at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getInt(AbstractJdbc2ResultSet.java:2138) ~[postgresql-9.3-1102-jdbc41.jar:na] 
    at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getInt(AbstractJdbc2ResultSet.java:2589) ~[postgresql-9.3-1102-jdbc41.jar:na] 
    at com.mchange.v2.c3p0.impl.NewProxyResultSet.getInt(NewProxyResultSet.java:2426) ~[c3p0-0.9.2.1.jar:0.9.2.1] 
    at org.hibernate.type.EnumType$OrdinalEnumValueMapper.getValue(EnumType.java:372) ~[hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
    at org.hibernate.type.EnumType.nullSafeGet(EnumType.java:107) ~[hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
    at org.hibernate.type.CustomType.nullSafeGet(CustomType.java:127) ~[hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
    at org.hibernate.type.AbstractType.hydrate(AbstractType.java:106) ~[hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
    at org.hibernate.loader.Loader.extractKeysFromResultSet(Loader.java:785) ~[hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:721) ~[hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
    at org.hibernate.loader.Loader.processResultSet(Loader.java:953) ~[hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
    at org.hibernate.loader.Loader.doQuery(Loader.java:921) ~[hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:355) ~[hibernate-core-4.3.7.Final.jar:4.3.7.Final] 
    at org.hibernate.loader.Loader.doList(Loader.java:2554) ~[hibernate-core-4.3.7.Final.jar:4.3.7.Final] 

回答

1

我使用一些虚拟@Id String id_(由Hibernate或者JPA有时/经常需要(取决于您的场景/映射)不是逻辑/模型相关的必要)工作得很好:

public class SomeDao { 

    //@Id @Convert(converter=MyEnumConv.class) // explicitely providing converter 
               // would not help 
    @Column(insertable=false, updatable=false) // necessary because of conflict 
               // with id_ dummy field 
    private MyEnum id; 

    /** @deprecated use {@link #id} instead ; workaround for missing @Id-enum 
    *          mapping in Hibernate 
    */ 
    private @Deprecated @Id @Column(name="id") String id_; 

    ... 
} 
相关问题