我想实现表间的连接:
@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查询:
SELECT c FROM Users u LEFT JOIN Transactions t ON u.id = t.id;我不清楚如何选择合适的login到id。你能指引我吗?
发布于 2021-03-24 23:20:23
看看这个线程:How to join two unrelated entities using JPA and Hibernate
前两个答案很好地展示了如何构建左连接,以及基于hibernate版本的含义(即是否可以或是否必须恢复到SQL)。注意:您可以预期返回的每个行包含两个对象中的一个。
还有其他方法可以用懒惰的oneToManys映射这种关系,以及哪些不是您可以娱乐的,但这超出了问题的范围。
至于在哪里过滤用户,它将在您的where子句中。即
select ... WHERE user.id = transaction.user_id AND user.login = 'steve@minecraft.net';也是不相关的,但是如果您的user_id必须在事务表上,您可以考虑将它改为"int“而不是"Integer”。如果它可以是null (因为与原语不同,它可以设置为空),将它设置为"Integer“则更有用。
发布于 2021-03-21 22:45:29
您可能希望加入u.id和t.user_id,而不是尝试将事务ID连接到用户ID。由于事务ID可能只是一个整数,所以我不认为它与用户ID有任何关系。
SELECT c FROM Users AS u LEFT JOIN Transactions AS t ON u.id = t.id;我假设列c是从示例中删除的一些数据字段,但如果不是,它也可能会抱怨,因为它找不到一个不存在的列。
https://stackoverflow.com/questions/66738183
复制相似问题