我试图
sudo pip install --upgrade oauth2client
IdConverter是:
@Id
@Column(name = "MY_ID_FIELD")
@Convert(converter = IdConverter.class)
private Long id;
转换器将映射BigDecimal,属性字段类型Hibernate期望在sql server数据库中id列类型为数字,为Long。
我正在使用Spring Data Jpa,而我的存储库正在使用Long,正如我所希望的那样
@Converter
public class IdConverter implements AttributeConverter<Long, BigDecimal> {
@Override
public BigDecimal convertToDatabaseColumn(Long attribute) {
return BigDecimal.valueOf(attribute);
}
@Override
public Long convertToEntityAttribute(BigDecimal dbData) {
return dbData.longValue();
}
}
你知道它为什么不起作用吗?
答案 0 :(得分:5)
@Id
和@Convert
无法一起使用。使用@IdClass
可以解决此问题。您只需将@Convert
移至@IdClass
。
@Entity
@IdClass(PK.class)
public class YourClass {
@Id
private Long id;
...
}
public class PK implements Serializable {
@Column(name = "MY_ID_FIELD")
@Convert(converter = IdConverter.class)
private Long id;
}
答案 1 :(得分:3)
万一其他人遇到了我遇到的相同问题,您除了在@Column
上还必须在@IdClass
上加上@Converter
注释工作(而不是依靠命名策略)。
// doesn't work
public class PK implements Serializable {
@Convert(converter = IdConverter.class)
private Long id;
}
// works
public class PK implements Serializable {
@Column(name = "ID")
@Convert(converter = IdConverter.class)
private Long id;
}
答案 2 :(得分:0)
使用 EclipseLink 2.7.6 我遇到了同样的问题。
我的解决方案是:
实体类:
@Entity(name = "xxx") public class xxx implements Serializable { @EmbeddedId private XxxPk pk; ... }
ID 类:
@Embeddable public class XxxPk implements Serializable { @Column(name = "A_TYPE") @Convert(converter = ATypeAttributeConverter.class) private AType aTypeAttribute; ... }
转换器:
import javax.persistence.AttributeConverter; import javax.persistence.Converter; @Converter public class ATypeAttributeConverter implements AttributeConverter<AType , String> { @Override public String convertToDatabaseColumn(AType agrType) { ... } @Override public AType convertToEntityAttribute(String code) { ... } }
枚举:
public enum AType { E1, E2, ...; ... }
我也用 EclipseLink-Converter (org.eclipse.persistence.annotations.Converter) 检查过,但没有成功。