Dan*_*ana 6 many-to-many hibernate jointable joincolumn
有3个表:
TABLE_A
ID_A
field1
fieldN
TABLE_B
ID_B
field1
fieldN
TABLE_A_B
ID_A
ID_B
orderField
public class A(){
@ManyToMany
@JoinTable(name="TABLE_A_B", joinColumns={@JoinColumn(name="ID_A")}, inverseJoinColumns={@JoinColumn(name="ID_B")})
@OrderBy(value="orderField")
private List<TABLE_B> BList;
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用,而是我得到一个运行时错误:
Caused by: org.postgresql.util.PSQLException: ERROR: column B1_.orderField doesn't exist Position: 1437
Run Code Online (Sandbox Code Playgroud)
Hibernate在TABLE_B中搜索字段.是否可以使用连接表的字段在多对多关系中使用"OrderBy"?或者任何其他方式来获得基于相同领域的订单?
Pet*_*vic 10
你的代码是正确的,你试过,它会工作.一个问题是你正在使用list这样的,而你在缓存中的列表可能不会被排序,但如果你清除当前会话并再次获取它将按照你设置的顺序进行排序@OrderBy(value="orderField").
@OrderBy关于hibernate 文档还有另一个问题;
列表可以以两种不同的方式映射:
- 作为有序列表,其中订单未在数据库中实现
- 作为索引列表,其中订单在数据库中实现
要在内存中订购列表,请将@ javax.persistence.OrderBy添加到您的属性中.
但我刚试过你的问题,并且数据库的查询按参数(hibernate.show_sql=true)排序,所以我不确定它们对于上层语句的含义.
我的查询示例;
select ... from ... inner join ... where users0_.event_id=? order by user1_.fullname
Run Code Online (Sandbox Code Playgroud)
我将得出结论,如果在数据库上进行排序,那么您可以安全地使用@OrderBy注释.
更新:
@OrderBy 应该具有本机sql值,例如;
@OrderBy(value="orderField")
private List<TABLE_B> BList;
Run Code Online (Sandbox Code Playgroud)
orderField表中列的数据库名称在哪里TABLE_B,也可以这样做@OrderBy(value="lower(fullname) desc")
如果你想在连接TABLE_A_B中创建一个列,它与java中列表中的列保持相同的顺序,那么你应该使用 @OrderColumn(name="orderField")
试试这个;
@ManyToMany
@JoinTable(name="TABLE_A_B", joinColumns={@JoinColumn(name="ID_A")}, inverseJoinColumns={@JoinColumn(name="ID_B")})
@OrderColumn(name="orderField")
private List<TABLE_B> BList;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10219 次 |
| 最近记录: |