Столбцы Spring data jap multi таблиц с объединением - PullRequest
0 голосов
/ 17 января 2019

У меня есть две таблицы: user_info и user_password. Я хочу отображать typeName напрямую при отображении подробной информации userInfo, но я не хочу настраивать отношения (OneToMany или ManyToOne) между этими двумя объектами. Но это не работает, кто мне может помочь?

@Data
@Entity
@DynamicUpdate
public class UserInfo {// user_info
    @Id
    private Integer id;
    private String name;
    private Byte gender;
    private String thirdPartId;
    private Integer age;
    private String telphone;
    private String registerMode;
}

@Entity
@Data
public class UserPassword {//user_password

    @Id
    private Integer id;
    private String encryptPassword;
    private Integer userId;


}


/** 
 * This is wish result entity
 * @author Mason
 * @version v1.0
 * @since 2019/1/16
 */
@Data
public class UserInfoPassword {
    private Integer id;
    private String name;
    private Byte gender;
    private String thirdPartId;
    private Integer age;
    private String telphone;
    private String registerMode;
    private String encryptPassword;
}

 @Query(value = "SELECT u.id,u.name,u.gender,u.third_part_id,u.age,u.telphone,u.register_mode,p.encrypt_password FROM user_info u " +
            "LEFT JOIN user_password p ON  u.id=p.user_id ", nativeQuery = true)
    List<UserInfoPassword > queryAll();

этот тип возврата UserInfoPassword будет возникать исключение: org.springframework.core.convert.ConverterNotFoundException: не найден конвертер, способный к преобразованию из типа [org.springframework.data.jpa.repository.query.AbstractJpaQuery $ TupleConverter $ TupleBackedMap] в тип [com.mason.modelreposit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posit.posll. UserInfoPassword]

если я изменю возвращаемый объект и сделаю это:

 List<Object> userInfoPasswords = userInfoRepository.queryAll();
        for (Object o : userInfoPasswords) {
            UserInfoPassword uip = (UserInfoPassword) o;
            System.out.println(uip);
        }

тогда произойдет это исключение:

java.lang.ClassCastException: [Ljava.lang.Object; невозможно преобразовать в com.mason.sell.repository.model.UserInfoPassword

у кого есть отличные способы сделать многостольный запрос на соединение ???

1 Ответ

0 голосов
/ 17 января 2019

Будет возвращен массив объектов, поскольку вы не предоставили никакого сопоставления.

Попробуйте это: -

List<Object[]> userInfoPasswords = userInfoRepository.queryAll();
for (Object o[] : userInfoPasswords) {
    System.out.println("id: " + o[0]); // or call the setter of new UserInfoPassword
    System.out.println("name: " + o[1]);
    // ... and so on
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...