Sql 使用join按id映射用户

Sql 使用join按id映射用户,sql,hibernate,spring-data-jpa,spring-data,hql,Sql,Hibernate,Spring Data Jpa,Spring Data,Hql,我想实现表之间的连接: @Table(name=“users”) 公共类用户实现可序列化{ @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) @列(name=“id”,unique=true,updateable=false,nullable=false) 私有int-id; @列(长度=255) 私有字符串登录; } @表(name=“交易”) 公共类事务实现可序列化{ @身份证 @GeneratedValue(策略=GenerationType

我想实现表之间的连接:

@Table(name=“users”)
公共类用户实现可序列化{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“id”,unique=true,updateable=false,nullable=false)
私有int-id;
@列(长度=255)
私有字符串登录;
}
@表(name=“交易”)
公共类事务实现可序列化{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“id”,unique=true,updateable=false,nullable=false)
私有int-id;
@列(name=“user\u id”,长度=20)
私有整数用户标识;
}
使用
login
我想从表
users
中选择引用
id
,并将其映射到
userId
,列出与表
交易中的id匹配的应用程序行

我尝试了以下HQL查询:

SELECT c FROM Users u LEFT JOIN Transactions t ON u.id = t.id;

我不清楚如何选择合适的
登录
id
。你能指导我吗?

你可能想加入
u.id
t.user\u id
,而不是试图将事务id加入到用户id。由于事务id可能只是一个整数,因此我认为它与用户id没有任何关系

从用户中选择c作为u左键加入事务作为t ON u.id=t.id;

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

看看这个线程:

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

你还可以用其他方法来描绘这种与懒惰的oneToManys的关系,以及你不喜欢的东西,但这超出了问题的范围

至于在何处对用户进行筛选,应该在where子句中。。i、 e

select ... WHERE user.id = transaction.user_id AND user.login = 'steve@minecraft.net';

也是无关的,但是如果您的用户ID必须在事务表上,您可以考虑将其设为“int”而不是“整数”。如果它可以为null(因为与原语不同,它可以设置为null),则将其设置为“整数”更有用。

但我还需要添加
where u.login=“some user”
?正确的添加方式是什么?