TypeConverter в столбце Id в сочетании с jpql

1

У меня есть объект базы данных, который описывается штрих-кодом как уникальный идентификатор. Чтобы лучше использовать штрих-код, я добавил класс 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
jpql
typeconverter

1 ответ

1

Вам нужно использовать объекты штрих-кода в вашем приложении. Ваша реализация JPA (например, Hibernate) будет использовать конвертер для каждого доступа к базе данных для преобразования.

Вы можете найти пример в моем реестре github: https://github.com/thjanssen/ColorConverter/blob/master/Converter/src/test/java/blog/thoughts/on/java/jpa21/TestColorConverter.java#L52

  • 1
    Можете ли вы добавить пример того, как вы получите доступ к штрих-коду в запросе jpql?
  • 0
    Вам нужен доступ к строке или объекту в запросе JPQL?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню