В @ConstructorResult не удается использовать несколько сопоставлений для полей, имеющих похожие типы - PullRequest
0 голосов
/ 19 апреля 2019

Я использую @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...
}
...