不能在使用hibernate 5.0.7和glassfish 4.1.1的Entites中使用枚举

时间:2016-02-01 10:01:24

标签: java mysql hibernate enums glassfish-4.1

为什么我不能使用hibernate大于v4.3.5,Glassfish v4.1.1,Java v1.8.0_72和MySQL Connector v5.1.38的枚举。

使用hibernate v4.3.5,所有工作都与枚举完美配合。我用Arquillian编写了一个JUnit测试,并使用实际的hibernate v5.0.7编写了一个嵌入式glassfish服务器,它也可以工作。

是hibernate还是glassfish bug?我的源代码有问题吗?

我有以下实体;

@Entity
@Table(name = "textbausteine")
@XmlRootElement
@AttributeOverride(name = "id", column = @Column(
    name = "textbaustein_id",
    nullable = false,
    columnDefinition = AbstractBaseEntity.PRIMARY_KEY_COLUMN_DEFINITION)     )
public class Textbaustein extends AbstractBaseEntityStatus {
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 1000)
    @Column(name = "textbaustein", nullable = false, length = 1000)
    private String textbaustein;

    @Basic(optional = false)
    @NotNull
    @Column(name = "textbaustein_art", nullable = false, columnDefinition = "tinyint(3) unsigned")
    @Enumerated(EnumType.ORDINAL)
    private TextbausteinArtEnm textbausteinArt;

    public String getTextbaustein() {
        return this.textbaustein;
    }

    public void setTextbaustein(String textbaustein) {
        this.textbaustein = textbaustein;
    }

    public TextbausteinArtEnm getTextbausteinArt() {
        return this.textbausteinArt;
    }

    public void setTextbausteinArt(TextbausteinArtEnm textbausteinArt) {
        this.textbausteinArt = textbausteinArt;
    }
}

这个枚举:

public enum TextbausteinArtEnm {
    TEXTBAUSTEINART_TEXT,
    TEXTBAUSTEINART_NR;
}

SQL:

CREATE TABLE `textbausteine` (
  `textbaustein_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `textbaustein` varchar(1000) COLLATE latin1_german1_ci NOT NULL,
  `textbaustein_art` tinyint(3) unsigned NOT NULL COMMENT 'TextbausteinEnm',
  `lock_version` bigint(20) unsigned DEFAULT '0',
  `geloescht` bit(1) NOT NULL DEFAULT b'0',
  PRIMARY KEY (`textbaustein_id`),
  KEY `textbausteine__textbaustein_art` (`textbaustein_art`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;

在呼叫持续时获取此异常:

    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1146)
... 214 more
Caused by: java.sql.SQLException: Incorrect integer value: '\xAC\xED\x00\x05~r\x004de.ods.blue.common.enm.stammdaten.TextbausteinArtEnm\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00xr\x00\x0' for column 'textbaustein_art' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)
at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2073)
at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2009)
at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5094)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1994)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:204)
... 234 more

调用SELECT时获取此异常:

Caused by: org.hibernate.type.SerializationException: could not deserialize
at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:243)
at org.hibernate.internal.util.SerializationHelper.deserialize(SerializationHelper.java:287)
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.fromBytes(SerializableTypeDescriptor.java:138)
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:113)
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:27)
at org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$2.doExtract(VarbinaryTypeDescriptor.java:53)
at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:238)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:234)
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:224)
at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:300)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2727)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1728)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1654)
at org.hibernate.loader.Loader.getRow(Loader.java:1543)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:727)
at org.hibernate.loader.Loader.processResultSet(Loader.java:972)
at org.hibernate.loader.Loader.doQuery(Loader.java:930)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:336)
at org.hibernate.loader.Loader.doList(Loader.java:2611)
at org.hibernate.loader.Loader.doList(Loader.java:2594)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2423)
at org.hibernate.loader.Loader.list(Loader.java:2418)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:501)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:371)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1326)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:87)
at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:606)
at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:483)
... 212 more
Caused by: java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2335)
at java.io.ObjectInputStream$BlockDataInputStream.readS
2016-02-01T10:43:53.281+0100|Information: hort(ObjectInputStream.java:2804)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:802)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:309)
at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:299)
at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:218)
... 241 more

0 个答案:

没有答案