我有一个实体:
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/