hibernate - 从 glassfish 4 迁移到 wildfly 8.1 后,AttributeConverter 失败

标签 hibernate jpa glassfish wildfly-8

我有一个实体:

import java.io.Serializable;
import javax.persistence.*;
import java.util.List;

@Entity
@Table(name="user")
@NamedQuery(name="User.findAll", query="SELECT u FROM User u")
public class User implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(unique=true, nullable=false)
    private int id;

    @Column(nullable=false)
    private boolean aktiv;
...
}

和转换器:
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;

@Converter(autoApply = true)
public class BooleanConverter implements AttributeConverter<Boolean, Byte> {

    @Override
    public Byte convertToDatabaseColumn(Boolean value) {
        if (value) {
            return 1;
        } else {
            return 0;
        }
    }

    @Override
    public Boolean convertToEntityAttribute(Byte value) {
        return 1 == value.byteValue();
    }

}

这适用于 glassfish 4.0。

但是在wildfly 8.1上,相同的代码会产生:
javax.persistence.PersistenceException: org.hibernate.HibernateException: Unknown wrap conversion requested: [B to java.lang.Byte
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763)

(如果我删除“aktiv”列,它会起作用。)

知道问题是什么吗?

最佳答案

如果 Byte 被替换为 Integer 则有效。
默认情况下,MySql 的 'tinyint' 是用字节映射的。
AttributeConverter 也用作 AttributeConverter<Boolean, Integer>

关于hibernate - 从 glassfish 4 迁移到 wildfly 8.1 后,AttributeConverter 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26347443/

相关文章:

java - 添加自定义记录器时出现 Glassfish TimeoutException

java - hibernate hbm 文件中的 @Convert 相当于什么?

spring - Jackson @ResponseBody 上的内部服务器错误

java - ORA-01843: 不是有效的月份 JPA

java - 程序化登录

java - OSGi 客户端从 JavaEE 服务器访问 EJB 中的 RMI ClassCastException

java - Hibernate - 强制父类和子类之间的内部连接

java - 保存到数据库时浪费时间

java - org.hibernate.Session.save() 触发数据库插入

java - 如何在多个 PU 之间最好地共享实体类/DAO?