如何解决加入相关实体时,可以指定基于日期的分区键吗?
| 我有两个相关的实体,它们由hibernate支持的JPA注释映射。实体在oracle中都有序列支持的标识列。我们也有每月分区,由一个名为ENTRY_DATE的列表示。T_MASTER T_JOINED
--------- -----------
MASTER_ID JOINED_ID
ENTRY_DATE ENTRY_DATE
MASTER_ID(FK)
... ....
为了获得分区键的好处,我希望Hibernate同时加入身份ID和分区键,但是当我在Joined类中使用以下注释时:
@ManyToOne
@JoinColumns(value={
@JoinColumn(name=\"MASTER_ID\"),@JoinColumn(name=\"ENTRY_DATE\")})
private Master master;
我收到有关连接列过多的错误。我被迫使用
@JoinColumn(name=\"MASTER_ID\")
private Master master;
我有点JPA /休眠菜鸟。加入相关实体时,除了主键外,还可以使用分区键吗?
谢谢!
解决方法
您可能需要在
Master
中将这两列声明为复合主键的一部分。 Hibernate不会在乎数据库中真正的PK。使用@Embeddable映射可能会稍微复杂一些,但是应该可以解决问题。
, 是。
使用本机sql如下所示:
Query query = session.createSQLQuery( \"SELECT {T_master.*},{T_joined.*} FROM schema.t_master AS T_master OUTER LEFT JOIN schema.T_joined AS T_joined ON T_master.ENTRY_DATE = T_joined.ENTRY_DATE AND T_master.MASTER_ID = T_joined.JOINED ID \" /*WHERE ... */ );
query.setEntity( \"T_master\",T_master.class);
query.setJoin( \"T_joined\",\"T_master.joinedSet\"); //joinedSet is the one-to-many mapping
query.setJoin( \"T_master\",\"T_joined.master\" );
因此,您在查询中变得非常冗长,并且休眠仅充当对象映射器。
使用Criteria或HQL,除了主键外,不可能在某些字段上有OUTER LEFT JOIN。这就是为什么如果您有这样的选择,请使用本机SQL代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。