首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Convert on @Id字段

@Convert on @Id字段
EN

Stack Overflow用户
提问于 2017-05-19 19:50:12
回答 2查看 5.3K关注 0票数 11

我在试着

代码语言:javascript
复制
@Id
@Column(name = "MY_ID_FIELD")
@Convert(converter = IdConverter.class)
private Long id;

IdConverter是:

代码语言:javascript
复制
@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();
    }
}

转换器将把BigDecimal ( Hibernate期望的属性字段类型)映射到Long (假定sql server数据库中的id列类型是numeric )。

我使用的是Spring Data Jpa,而我的存储库使用的时间也和我预期的一样长

代码语言:javascript
复制
@Repository
public interface CityRepository extends JpaRepository<City, Long> { }

你知道它为什么不工作吗?

EN

回答 2

Stack Overflow用户

发布于 2017-09-11 12:08:06

@Id@Convert不能一起使用。使用@IdClass可以解决此问题。您只需要将@Convert移到@IdClass

代码语言:javascript
复制
@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;
}
票数 18
EN

Stack Overflow用户

发布于 2020-04-17 03:11:39

如果其他人遇到与我相同的问题,除了@Converter之外,您还必须在@IdClass上使用@Column注释才能使其正常工作(而不是依赖于命名策略)。

代码语言:javascript
复制
// doesn't work
public class PK implements Serializable {
  @Convert(converter = IdConverter.class)
  private Long id;
}
代码语言:javascript
复制
// works
public class PK implements Serializable {
  @Column(name = "ID")
  @Convert(converter = IdConverter.class)
  private Long id;
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44069361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档