У меня есть объект базы данных, который описывается штрих-кодом как уникальный идентификатор. Чтобы лучше использовать штрих-код, я добавил класс 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);
}
}
Теперь я не уверен, как я могу использовать столбец barcode/id в своем приложении:
1) Можно ли получить объект игры, используя:
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) Как отображаются сопоставления отношений, которые реализуются с использованием конвертера? Отображаются ли они строковым представлением из конвертера или с помощью нескольких полей объекта штрихового кода?
Приветствие biro
Вам нужно использовать объекты штрих-кода в вашем приложении. Ваша реализация JPA (например, Hibernate) будет использовать конвертер для каждого доступа к базе данных для преобразования.
Вы можете найти пример в моем реестре github: https://github.com/thjanssen/ColorConverter/blob/master/Converter/src/test/java/blog/thoughts/on/java/jpa21/TestColorConverter.java#L52