gpt4 book ai didi

java - 在ManyToMany上添加主键(用于发布)

转载 作者:行者123 更新时间:2023-12-01 10:44:09 26 4
gpt4 key购买 nike

我在两个实体之间有多对多关系

@javax.persistence.Entity
@Table(name = "t_aircraft_model")
public class AircraftModel extends DbObject {

@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name = "t_aircraft_model_entity", joinColumns = { @JoinColumn(name = "aircraft_model_uid", nullable = false) }, inverseJoinColumns = { @JoinColumn(name = "entity_id_LDAP", nullable = false) })
private List<com.airbushelicopter.ahead.db.pojo.Entity> entities ;

但是 sqlServer 不允许我发布中间表:t_aircraft_model_entity

new publication

我想到了两种解决方案

  • 表格的两列 t_aircraft_model_entity 都成为主键(在我的例子中,飞机不能多次链接到同一实体)
  • 我添加第三列 (id),它将作为主键
  • 或者?

但我不知道如何使用 hibernate 和注释来做到这一点。

谢谢!

最佳答案

首先要做的事情。您将需要 3 个表来建立多对多关系,当然,您需要确保其他两个表都有 PK

在代码方面,你可以这样做:

您的机场型号:

@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@JoinTable(name = "t_aircraft_entity_relation",joinColumns = {
@JoinColumn(name = "aircraftid", nullable = false, updatable = false)},
inverseJoinColumns = { @JoinColumn(name = "entityid",nullable = false,updatable= false)
})
private Set<com.airbushelicopter.ahead.db.pojo.Entity> entities ;

在您的实体模型上:

@ManyToMany(fetch = FetchType.EAGER,mappedBy="entities")    
private Set<AircraftModel> aircrafts;

您必须创建一个关系表,如我的示例所示:

CREATE TABLE t_aircraft_entity_relation
(
aircraftid integer NOT NULL,
entityid integer NOT NULL,
CONSTRAINT "PK_AIRCRAFT_ENTITY" PRIMARY KEY (aircraftid, entityid),
CONSTRAINT "FK_AIRCRAFT_ENTITY" FOREIGN KEY (aircraftid)
REFERENCES t_aircraft_model (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT "FK_ENTITY_AIRCRAFT" FOREIGN KEY (entityid)
REFERENCES t_entity_model (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)

PS:这段SQL是基于Postgresql的,所以你需要做一些修改。

关于java - 在ManyToMany上添加主键(用于发布),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34287058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com