Java 通过Hibernate使用sql查询映射实体
我想将实体映射到另一个实体(1:1),并使用Hibernate在sql表达式中指定条件 我有带桌子位置和主题的ERA方案。受试者与位置的关系为1:N。 每个职位都有创建日期。我想通过hibernate将上一次创建的位置(一个来自N且主题id相同的位置)映射为实体主题 我尝试了@Formula,但没有成功Java 通过Hibernate使用sql查询映射实体,java,hibernate,join,Java,Hibernate,Join,我想将实体映射到另一个实体(1:1),并使用Hibernate在sql表达式中指定条件 我有带桌子位置和主题的ERA方案。受试者与位置的关系为1:N。 每个职位都有创建日期。我想通过hibernate将上一次创建的位置(一个来自N且主题id相同的位置)映射为实体主题 我尝试了@Formula,但没有成功 @Entity public class Position { .. } @Entity public class Subject { .. @Basic(fetch = Fet
@Entity
public class Position {
..
}
@Entity
public class Subject {
..
@Basic(fetch = FetchType.LAZY)
@Formula("select p.* from position p inner join (select subject_id, max(position_date) maxdate from position where subject_id = 3743073 group by subject_id ) pmaxgrouped on p.subject_id = pmaxgrouped.subject_id and p.position_date = pmaxgrouped.maxdate")
private Position lastPosition;
}
Hibernate不匹配结果sql查询
SELECT *
FROM
(SELECT giposobj0_.POSOBJ_ID AS POSOBJ1_1688_,
giposobj0_.SYS_AGENDA_ID AS SYS2_1688_,
giposobj0_.SYS_INS_DATE AS SYS3_1688_,
giposobj0_.SYS_LOGIN_ID_INS AS SYS4_1688_,
giposobj0_.SYS_LOGIN_ID_UPD AS SYS5_1688_,
giposobj0_.SYS_UPD_DATE AS SYS6_1688_,
giposobj0_.SYS_LOGIN_ID_OWNER AS SYS7_1688_,
giposobj0_.SYS_ORGUNIT_ID AS SYS8_1688_,
giposobj0_.SYS_PUBKIND_LEVEL AS SYS9_1688_,
giposobj0_.POSOBJ_CODE AS POSOBJ10_1688_,
giposobj0_.POSOBJ_IMEI AS POSOBJ11_1688_,
giposobj0_.POSOBJ_LASTSTATUS AS POSOBJ12_1688_,
giposobj0_.POSOBJ_MODEL AS POSOBJ13_1688_,
giposobj0_.POSOBJ_NOTIF AS POSOBJ14_1688_,
SELECT p.*
FROM position p
INNER JOIN
(SELECT giposobj0_.posobj_id,
MAX(giposobj0_.position_date) giposobj0_.maxdate
FROM position
WHERE giposobj0_.posobj_id = 3743073
GROUP BY giposobj0_.posobj_id
) giposobj0_.pmaxgrouped
ON p.posobj_id = pmaxgrouped.posobj_id
AND p.position_date = pmaxgrouped.maxdate AS formula11_
FROM eira_gi.VS_POSOBJ giposobj0_
WHERE giposobj0_.POSOBJ_IMEI=111111111111111
);
选项1:使用创建有序列表。随后,可以返回该集合中的最后一个对象。这是一个很好的例子
选项2:每次保存或更新主题时保存相关的“lastPosition” 你不应该这样做。如果没有任何位置,并且subselect返回0结果,该怎么办?如果您在修改头寸后使用现金,“lastPosition”将不会更新。如果没有任何头寸,hibernate可能会为字段“lastPosition”返回null。