Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate中的表连接_Java_Hibernate - Fatal编程技术网

Java Hibernate中的表连接

Java Hibernate中的表连接,java,hibernate,Java,Hibernate,我有两个表用户和事务。一个用户可能有多个事务。但是我需要连接用户表和事务表中的最后一个事务 到目前为止,我所做的是获取用户数据,并将整个事务作为一个列表进行处理,但我需要将事务限制为最后1个或最后一个事务。这是基于id的最大值。当为具有大量事务的用户提取延迟提取时,速度会变慢。如何修复此问题以仅获取最后一个事务 像往常一样 User{ Blah blah; List<Transaction> transaction; } 我认为你需要从一个孩子到另一个家长: s

我有两个表用户和事务。一个用户可能有多个事务。但是我需要连接用户表和事务表中的最后一个事务

到目前为止,我所做的是获取用户数据,并将整个事务作为一个列表进行处理,但我需要将事务限制为最后1个或最后一个事务。这是基于id的最大值。当为具有大量事务的用户提取延迟提取时,速度会变慢。如何修复此问题以仅获取最后一个事务

像往常一样

User{

    Blah blah;
    List<Transaction> transaction;

}

我认为你需要从一个孩子到另一个家长:

select t 
from Transaction t
inner join fetch t.user u
where t.id = ( select max(id) from Transaction )
Hibernate无法返回部分一对多集合。您总是会得到所有关联的子项,因为这些子项也将被管理


选择子项并获取父项更适合此任务。

这应该使用SQL而不是条件来完成

从用户中选择{u.},{t.}作为u内部连接选择用户\u id,从事务组中选择maxid作为最大\u t\id,按用户\u id在u.id=用户\u id内部连接事务作为t在t.id=最大\u t\u id

阅读本文件:

您应该使用setEntityu、User.class和setEntityt、Transaction.class


通过list方法,您将获得对象[]的列表,其中第一个项是user,第二个项是其最后一个事务。用户将拥有完整的事务列表作为集合,但可以将其配置为延迟加载。

是否尝试了session.createFilter方法?您可以按id desc获取事务列表,然后使用“我已经完全按照您所说的做了”,将max results设置为1,但现在我需要一个正确的用户连接,因为可能有没有事务的用户。如何操作。您可以发出第二个查询,如:从u.transactions为空的用户中选择u,或选择所有用户及其所有事务,如:从用户左侧选择u加入u.transactions并将结果转换为DTO列表,在该列表中您可以将用户与其上一个事务配对。
select t 
from Transaction t
inner join fetch t.user u
where t.id = ( select max(id) from Transaction )