我有两个实体,EmployerLanguage,它们之间存在多对多关系.每个Employer可以有多个Language个字母,并且它们有一个可以说的语言的首选顺序.我希望将首选顺序存储在JOIN表中,并通过Ordered List<Language>检索它,但我不确定如何在JPA中实现它.

下面是我的Employer个和Language个实体的一个例子:

@Entity
public class Employer {
    @Id
    private Long id;
    //.....
    @ManyToMany
    private List<Language> languages;
    //.....
}
@Entity
public class Language {
    @Id
    private Long id;
    //.....
}

数据库表可能如下所示:

employer table:
| id | bigint |
....

language table:
| id | bigint |
....

employer_language table:
| employer_id | bigint |
| language_id | bigint |
| order_index | int    |

JPA允许这样做吗?

我曾考虑使用包含Language作为键和按值排序索引的Map字段,但我认为可能会有更好的解决方案.

推荐答案

是的,这是可能的.您必须使用@OrderColumn注释.在您的示例中,您的代码如下所示:

@Entity
public class Language {
    @Id
    private Long id;
    //.....
}

@Entity
public class Employer {
    @Id
    private Long id;
    //.....
    @ManyToMany
    @OrderColumn(name = "order_index")
    private List<Language> languages;
    //.....
}

Java相关问答推荐

Java -使用空比较或instanceof?

在URL类图中表示Java swing类

ApachePOI:不带换行的新行

Java Swing:初始化身份验证类后未检测到ATM_Interface键事件

JavaFX Maven Assembly插件一直打包到错误的JDK版本

为什么使用JDK21获取锁定锁比使用JDK11慢

测试期间未执行开放重写方法

使用Spring和ActiveMQ的侦听器方法引发属性名称不能重复为空警告

与不同顺序的组进行匹配,不重复组但分开

在JDK 1.8源代码中,为什么使用A-B 0来确定哪个更大,而不是A B?

如何在一行中使用Dijkstra中的Java Stream

如何在Cosmos DB(Java SDK)中增加默认响应大小

如何将Pane的图像快照保存为BMP?

是否为计划任务补偿系统睡眠?

如何配置空手道以使用FeignClient或RestTemplate代替ApacheHttpClient

如何使用Criteria Builder处理一对多关系中的空值?

如果第一位数字和最后一位数字相差超过一位,您将如何获得随机数?

如何正确使用java.time类?

获取401未经授权,即使在标头中设置了浏览器名称和cookie

为什么Java编译器为没有参数的方法(getter方法)创建桥接方法