我试图在数据库中持久化ack(Enum)的值,但当它持久化时,它采用的是序数值而不是值本身。我该怎么做才能保存值而不是序数?
转换器
@Convert
public class AnomalieAckConverter implements AttributeConverter<AnomalieAck, Integer> {
/**
* @param attribute
* @return
* @see javax.persistence.AttributeConverter#convertToDatabaseColumn(java.lang.Object)
*/
@Override
public Integer convertToDatabaseColumn(AnomalieAck anoAck) {
// TODO Auto-generated method stub
// return anoAck.getValue();
return null;
}
/**
* @param dbData
* @return
* @see javax.persistence.AttributeConverter#convertToEntityAttribute(java.lang.Object)
*/
@Override
public AnomalieAck convertToEntityAttribute(Integer ack) {
// TODO Auto-generated method stub
// return AnomalieAck.getByValue(ack);
return null;
}
枚举:
public enum AnomalieAck {
NON_ACQUITTEE(0),
ACQUITTEE_APP1 (1),
ACQUITTEE_APP2(2),
/** Aacquittee en erreur. */
ACQUITTEE_ERREUR(10),
private int ack = 0;
private AnomalieAck() {
}
private AnomalieAck(final int value) {
this.ack = value;
}
public int getValue() {
return this.ack;
}
public void setAck(int ack) {
this.ack = ack;
}
public static AnomalieAck getByValue(int ackNumero) {
for (final AnomalieAck ackitement : AnomalieAck.values()) {
if (ackitement.getValue() == ackNumero) {
return ackitement;
}
}
Java类:
@Column(name = "ANO_ACK")
@Convert(converter = AnomalieAckConverter.class)
private AnomalieAck ack = AnomalieAck.NON_ACQUITTEE;
有没有办法让hib持久化值而不是序数值?
2条答案
按热度按时间mzillmmw1#
使用此转换器进行本地测试:
并且该实体字段定义
则枚举中的ack值将被持久化,而不是序号。2您提供的代码示例是否重现了这个问题?
vzgqcmou2#
实体字段定义
使用setter方法将ack注入到服务类中。