#hibernate #jpa #spring-data-jpa #spring-data
#спящий режим #jpa #spring-data-jpa #spring-данные
Вопрос:
Я пытаюсь получить различные значения нескольких столбцов из таблицы SubContactModel, в которой я бы искал значение, которое в данном случае является электронной почтой.
Хотя я могу получать разные значения, то, что я пытаюсь получить сейчас, — это получить значения внутри поля, которое сопоставлено с @ManyToOne . На данный момент я могу получить только внешний ключ (FK), но я хотел бы получить другое значение из отношения. Например, я хотел бы получить значение countryphonecode из CountryPhoneCodeModel . Я включил свой уровень репозитория, чтобы показать, как я получаю различные значения прямо сейчас.
SubContactModel:
@Data
@Entity
public class SubContactModel implements Serializable {
@Id
@Column(name = "SUBCONTACTID", updatable = false, unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long subcontactID;
@ManyToOne()
@JoinColumn(name="PRSNTITLEID", nullable=true, updatable=true)
private PersonTitleModel personTitleID; // Person Title
@ManyToOne()
@JoinColumn(name = "countryPhonecode", nullable = true, updatable = true)
private CountryPhoneCodeModel countryPhoneCodeModel; // Country Code
@Column(name = "name", nullable = true, length = 50)
private String name;
@Column(name = "designation", nullable = true, length = 50)
private String designation;
@Column(name = "telnumber", nullable = true, length = 50)
private String telnumber;
@Column(name = "email", nullable = true, length = 50)
private String email;
@ManyToOne()
@JoinColumn(name="PERSONID", nullable=true, updatable=true)
private PersonModel personID;
}
CountryPhoneCodeModel:
public class CountryPhoneCodeModel implements Serializable {
@Id
@Column(name="CPHONECODEID",updatable = false,unique = true,nullable = false )
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long countryPhoneCodeID;
@Column(name="CPHONECODE",updatable=true,nullable=false,length=50)
private String countryPhoneCode;
@Column(name="COUNTRYNAME",updatable=true,nullable=false,length=50)
private String countryName;
@Column(name="DIALCODE",updatable=true,nullable=false,length=50)
private String dialCode;
}
Уровень репозитория :
@Repository
public interface SubContactRepo extends JpaRepository<SubContactModel, Long> {
@Query(value="SELECT DISTINCT u.designation,u.name,u.telnumber,u.countryphonecode,u.prsntitleid FROM subcontactmodel u WHERE u.email = :email", nativeQuery = true)
List <Object> findDistinctResult (String email);
}
Ответ №1:
Я нашел решение для этого:
Я удалил NativeQuery = true и изменил имена полей в @Query, чтобы они соответствовали имени в моей сущности, а не именам столбцов таблицы в базе данных.
@Query(value="SELECT DISTINCT u.designation,u.name,u.telnumber, u.countryPhoneCodeModel.countryPhoneCode ,u.personTitleID.personTitleName FROM SubContactModel u WHERE u.email= :email")
List <Object> findDistinctResult (String email);
Теперь это работает так, как я хочу!