有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;
}
但它不起作用,而是出现运行时错误:
Caused by: org.postgresql.util.PSQLException: ERROR: column B1_.orderField doesn't exist Position: 1437
Hibernate在TABLE_B中搜索该字段。是否可以使用联接表的字段在多对多关系中使用“ OrderBy”?还是以其他方式在同一领域下订单?
您的代码是正确的,如果您尝试过,它将起作用。一个问题是您正在使用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
我将得出结论,如果在数据库上完成订购,那么您可以安全地使用@OrderBy批注。
更新:
@OrderBy
例如,应该具有本地sql值;
@OrderBy(value="orderField")
private List<TABLE_B> BList;
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;
问题内容: 我有两个表和相关的Java映射。 这是我的Java实体。国家POJO: 和用户POJO: 问题是,我怎么能加入到在Hibernate中使用注释?当我使用Hibernate创建User对象时,我需要自动绑定这两个字段(代码和countryCode)。 问题答案: 您需要从映射到实体,并从映射到:
问题内容: 我有一个存储ID列表的JSON字段(我不知道这是最佳实践),我想知道是否可以在此JSON字段上使用do操作并在sql中使用它们。 以下是我要实现的虚拟示例,是否可以实现? 有了以上数据,我想构建一个查询,使我得到如下结果: 我在想以下一些伪风格的SQL,尽管我仍然不知道这是否可行,或者我将使用mysql提供的JSON函数实现此目的 如果问题不清楚,请告诉我。 问题答案: 借助Feras
问题内容: Hibernate Validator 4.x中是否有跨域验证的实现(或第三方实现)?如果没有,实现跨域验证器的最干净方法是什么? 例如,如何使用API来验证两个bean属性是否相等(例如,验证密码字段与密码验证字段匹配)。 在注解中,我期望这样的东西: 问题答案: 每个字段约束都应由不同的验证者注释处理,换句话说,不建议对一个字段进行其他字段的验证注释检查。跨领域验证应在课程级别
我在Oracle SQL Developer中创建了三个表,即 。表是连接表,因为和之间的关系是。 在hibernate中,我为和表创建了两个hibernate类和, 和表在hibernate类中定义如下: 我用一些记录填充了表和,连接表自动填充了一些记录。现在我目前面临的问题是,我想使用hiberante在连接表上使用一个简单的选择语句,如下所示: 我怎么能做到这一点,尽管联接表'Employe
我想使用联接表在两个表之间建立一对多关系。 这就是为什么我想使用联接表: Hibernate单向一对多关联-为什么连接表更好 最后,我想使用Hibernate注释来执行此操作。 我找到了一些使用xml映射实现这一点的示例,但没有使用注释。 我相信这将是如何创建表需要
问题内容: 我有两个表,和。 在表中我有一列。该列由电影适合的类别组成。这些类别是用逗号分隔的ID。 这是一个例子: 现在是一个实际的问题:是否可以执行一个查询,从电影表中排除类别列,而是从类别表中选择匹配的类别并以数组形式返回它们?像联接一样,但问题是存在多个用逗号分隔的类别,是否可以进行某种正则表达式? 问题答案: 在数据库字段中使用逗号分隔的列表是一种反模式,应不惜一切代价避免使用。 因为在