Я использую @ConstructorResult для отображения набора результатов sql, но если у меня несколько сопоставлений для нескольких запросов для полей с похожим типом, т. Е. В данной программе firstName и emailId, я не смогу выполнить задачу, так как для этого мне нужно сделать два конструктора параметров одинакового типа, что недопустимо в java, так что я могу сделать, если у меня несколько сопоставлений здесь.
Я также попытался @EntityResult, но для этого я вынужден сделать отображение для всех полей, присутствующих в моем классе. Но я хочу поставить несколько сопоставлений для нескольких результатов, таких как:
Один запрос приводит только к userId и firstName,
другие результаты только userId и emailId и т. д.
package com.example.demo.DO;
import ...;
@Entity
@Table(name = "UserDetail")
@SqlResultSetMapping(name = "USER_DETAIL_MAPPING_1", classes = {
@ConstructorResult(entityClass = UserDetailDO.class, fields = {
@ColumnResult(name = "userId", column = "userId"),
@ColumnResult(name = "profilePicUrl", column = "profilePicUrl"),
@ColumnResult(name = "firstName", column = "firstName"),
})
})
@SqlResultSetMapping(name = "USER_DETAIL_MAPPING_2", classes = {
@ConstructorResult(entityClass = UserDetailDO.class, fields = {
@ColumnResult(name = "userId", column = "userId"),
@ColumnResult(name = "profilePicUrl", column = "profilePicUrl"),
@ColumnResult(name = "emailId", column = "emailId"),
})
})
public class UserDetailDO {
@Id
Integer userId;
String profilePicUrl;
String firstName;
String lastName;
String birthDate;
String emailId;
public UserInfoDO(Integer userId, String profilePicUrl, String firstName) {
super();
this.userId = userId;
this.profilePicUrl = profilePicUrl;
this.firstName = firstName;
}
//This constructor is not allowed because type is same in both constructor
public UserInfoDO(Integer userId, String profilePicUrl, String emailId) {
super();
this.userId = userId;
this.profilePicUrl = profilePicUrl;
this.emailId = emailId;
}
//Getters & Setters...
}