#spring-boot
Вопрос:
@Entity @EntityListeners(AuditingEntityListener.class) @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "TIPO_CONTRATO", discriminatorType = DiscriminatorType.STRING) @JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" }) public class Contrato extends AuditorEntity implements Serializable, Clonable { @Column(name = "CIF_NIF") @JsonView(Views.Buscador.class) @JsonProperty("cifNif") private String cifNif; @Column(name = "NOMBRE_SOCIEDAD_PERSONA") @JsonView(Views.Buscador.class) private String nombreSociedadPersona; }
И у меня есть этот встраиваемый класс, вызываемый CuentaBancaria
из Contrato
таблицы:
@Embeddable public class CuentaBancaria implements Serializable { private static final long serialVersionUID = 6835775213299596371L; @Column(name = "TITULAR_CUENTA") @JsonView(Views.Completo.class) private String titularCuenta; }
В ContratoRepository
я пытаюсь выполнить запрос JPA, найдя « titularCuenta
» поле поиска Cuenta Bancaria по cifNif
полю Contrato
. Но это не работает. Что я могу сделать, чтобы решить эту проблему?
@Query(value="SELECT c.CuentaBancaria.titularCuenta FROM Contrato c WHERE c.cifNif= ?1 AND c.nombreSociedadPersona IS NOT NULL AND ROWNUM = 1") public String getNombreLegalCliente(String cifNif);
Ошибка, которая выбрасывает:
Вызвано: org.hibernate.Исключение запроса: не удалось разрешить свойство: CuentaBancaria из: com.xxxx.Contrato
Комментарии:
1. Можете ли вы обновить свой класс Contrato с помощью полей?
2. @BranislavLazic Да, я обновил вопрос
3. И это все поля?
4. У вас в классе нет поля с
CuentaBancaria
типом с@Embedded
аннотациейContrato
.
Ответ №1:
Тебе не хватает CuentaBancaria
поля в Contrato
классе. Вот почему JQL жалуется.
Добавьте поле в класс с @Embedded
аннотацией:
public class Contrato extends AuditorEntity implements Serializable, Clonable { @Embedded private CuentaBancaria cuentaBancaria; }
И исправьте выражение JQL в:
@Query(value="SELECT c.cuentaBancaria.titularCuenta FROM Contrato c WHERE c.cifNif= ?1 AND c.nombreSociedadPersona IS NOT NULL AND ROWNUM = 1") public String getNombreLegalCliente(String cifNif);
Комментарии:
1. Но нельзя ли обойтись без добавления этого?
2. Вам нужно это поле. Или, я не знаю, сделать какой-нибудь грязный взлом с помощью простого SQL.