2014-10-13 3 views
1

У меня есть сущность:AttributeConverter терпит неудачу после миграции из GlassFish 4 до wildfly 8,1

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" он работает)

Любая идея, в чем проблема?

ответ

3

Работает, если байт заменен на Integer. «tinyint» MySql по умолчанию сопоставляется с байтом. AttributeConverter также работает как AttributeConverter<Boolean, Integer>