gpt4 book ai didi

java - Id 列上的 TypeConverter 与 jpql 结合

转载 作者:太空宇宙 更新时间:2023-11-04 06:23:55 24 4
gpt4 key购买 nike

我有一个数据库实体,由条形码描述为其唯一 ID。为了更好地使用条形码,我添加了一个名为 Barcode 的类,其中包含 2 个值:- 条形码的值- 条形码的校验和因为我想将其紧凑地保存在数据库中,所以我添加了一个属性转换器,它将条形码转换为格式为(值+校验和)的字符串

@Entity
@Table
public class Game implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;

@Id
@Getter
@Setter
@Convert(converter = BarcodeConverter.class)
private Barcode barcode;

@Column
@Getter
@Setter
private String title;

@Column
@Getter
@Setter
private String comment;
}

@Converter(autoApply=true)
public class BarcodeConverter implements AttributeConverter<Barcode, String> {

public String convertToDatabaseColumn(Barcode attribute) {
return attribute.getValue() + attribute.getChecksum();
}

public Barcode convertToEntityAttribute(String dbData) {
return new Barcode(dbData);
}
}

现在我不确定如何在我的应用程序中使用条形码/id 列:

1)是否可以使用以下方式获取 Game 对象:

entityManager.find(Game.class, new Barcode("012345", "7"));

2) 如何在 jpql 查询中使用条形码字段?我可以访问条形码对象的字段,还是可以隐式处理字符串?例如,如果我想通过校验和选择一些游戏,我可以这样写:

from Game g where g.barcode.checkum = 7 

from Game g where g.barcode like "%7"

3) 使用转换器实现的关系是如何映射的?它们是通过转换器的字符串表示形式映射还是通过使用条形码对象的多个字段映射?

问候比罗

最佳答案

您需要在应用程序中使用 Barcode 对象。您的 JPA 实现(例如 Hibernate)将为每个数据库访问使用转换器来进行转换。

您可以在我的 github 存储库中找到一个示例:https://github.com/thjanssen/ColorConverter/blob/master/Converter/src/test/java/blog/thoughts/on/java/jpa21/TestColorConverter.java#L52

关于java - Id 列上的 TypeConverter 与 jpql 结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27061162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com