当前位置: 首页 > 知识库问答 >
问题:

带连接的Spring data jap多表列

戚学
2023-03-14

我有两个表,user_info和user_password。我想在显示userInfo详细信息时直接显示typeName,但我不想配置这两个实体之间的关系(OneToMany或manytone)。但不行,谁能帮我?

@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.sell.repository.model.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个答案

司马宏邈
2023-03-14

它将返回一个对象数组,因为您没有提供任何映射。

试试这个:-

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
}
 类似资料:
  • 几天来,我一直在为一个命名查询苦苦挣扎。命名查询具有与第二个表的内部联接。另一个复杂性是,第二个表上的主键是复合键。我在这里简化了两张表: 主键是nameIdx 复合主键位于nameIdx和nameType上 我试图在JPQL中模拟以下sql查询: 此查询在Oracle中按预期工作,返回许多记录。Java我有这些JPA实体: 和 还有一个主键类ANameRolePK 使用此设置,包括在上面的ANa

  • 我有2个具有多对多关系的实体User和AcCountBase。我需要从连接表中选择所有具有选定用户ID的AcCountBase对象。我尝试了一些连接查询,但不起作用。

  • 我使用Java(网豆软件)做一些项目,并链接到微软访问。 当我需要从Microsoft Access将三个表内部连接在一起时, 我没有问题将2个表内部连接在一起 我能得到结果。但不是3个表内连接。 对于上面的SQL,我有3个“A”表分别用于< code >用户| CPU |软件| 我得到的错误< code>java.sql.SQLException:在end SQL语句后找到字符 谢啦

  • 问题内容: 我想在以下(简化的)数据库中应用JPA: 因此,一个节点可以具有多个权限,并且一个权限可以被多个节点引用。 我希望我的班级看起来像这样: 但是注释“ @ManyToMany”似乎仅可用于“ @JoinTable”,在这种情况下,它不可用(据我所知)。有人知道修改数据库之外是否还有其他方法吗? 问题答案: JPA不允许这样做,因为它需要外键来引用完整的主键以用于标识目的,并且它可能不适用

  • 问题内容: 我从来没有做过这样的PHP / MYSQL技巧来加入多表。请具有该领域经验的人员帮助: TICKETS 表中的字段: 表 RECEPTS中的 字段: 表 PAYMENTS中的 字段: 表 CUSTOMERS中的 字段: 表之间的关系很容易理解: 我希望达到的最终结果: 我试图做这样的事情,但在某个地方出错: 问题答案: 您应该可以使用以下方法获得结果: 参见带有演示的SQL Fiddl

  • 问题内容: 我正在尝试使用hibernate条件生成器连接4个表。 下面分别是这些表。 在这4个表中,我想为MySQL执行以下sql脚本: 那么,如何使用Hibernate CriteriaBuilder实现这一目标?请帮助… 预先感谢....... 问题答案: CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQue