当前位置: 首页 > 面试题库 >

Hibernate @ManyToMany joinTable-使用联接表的字段进行订购

上官英哲
2023-03-14
问题内容

有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。 这是一个例子: 现在是一个实际的问题:是否可以执行一个查询,从电影表中排除类别列,而是从类别表中选择匹配的类别并以数组形式返回它们?像联接一样,但问题是存在多个用逗号分隔的类别,是否可以进行某种正则表达式? 问题答案: 在数据库字段中使用逗号分隔的列表是一种反模式,应不惜一切代价避免使用。 因为在