首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用联接按id映射用户

使用联接按id映射用户
EN

Stack Overflow用户
提问于 2021-03-21 22:22:52
回答 2查看 263关注 0票数 0

我想实现表间的连接:

代码语言:javascript
复制
@Table(name = "users")
public class Users implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, updatable = false, nullable = false)
    private int id;

    @Column(length = 255)
    private String login;
}

@Table(name = "transactions")
public class Transactions implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, updatable = false, nullable = false)
    private int id;

    @Column(name = "user_id", length = 20)
    private Integer userId;
}

使用login,我希望从表users中选择引用id,并将其映射到userId,并列出与表Transactions中的id匹配的app行。

我尝试了这个HQL查询:

代码语言:javascript
复制
SELECT c FROM Users u LEFT JOIN Transactions t ON u.id = t.id;

我不清楚如何选择合适的loginid。你能指引我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-24 23:20:23

看看这个线程:How to join two unrelated entities using JPA and Hibernate

前两个答案很好地展示了如何构建左连接,以及基于hibernate版本的含义(即是否可以或是否必须恢复到SQL)。注意:您可以预期返回的每个行包含两个对象中的一个。

还有其他方法可以用懒惰的oneToManys映射这种关系,以及哪些不是您可以娱乐的,但这超出了问题的范围。

至于在哪里过滤用户,它将在您的where子句中。即

代码语言:javascript
复制
select ... WHERE user.id = transaction.user_id AND user.login = 'steve@minecraft.net';

也是不相关的,但是如果您的user_id必须在事务表上,您可以考虑将它改为"int“而不是"Integer”。如果它可以是null (因为与原语不同,它可以设置为空),将它设置为"Integer“则更有用。

票数 1
EN

Stack Overflow用户

发布于 2021-03-21 22:45:29

您可能希望加入u.idt.user_id,而不是尝试将事务ID连接到用户ID。由于事务ID可能只是一个整数,所以我不认为它与用户ID有任何关系。

代码语言:javascript
复制
SELECT c FROM Users AS u LEFT JOIN Transactions AS t ON u.id = t.id;

我假设列c是从示例中删除的一些数据字段,但如果不是,它也可能会抱怨,因为它找不到一个不存在的列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66738183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档