我在将数据从一侧关系插入到其他表和关系的另一侧时遇到问题
我有:具有用户实体的表用户
@Entity
@Column(name="USER")
public class User{
private int id;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ID")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@ManyToMany
@Cascade(org.hibernate.annotations.CascadeType.ALL)
@JoinTable(name="USER_CARS_JOINTABLE",
joinColumns=@JoinColumn(name="USER_ID"),
inverseJoinColumns=@JoinColumn(name="CARS_ID"))
public Cars userCars;
//set and get methods omitted
}
带有 Cars 实体的表 CARS
@Entity
@Column(name="CARS")
public class Cars{
private int dateId;
@Id
@GeneratedValue(strategy=IDENTITY)
@Column(name="DATE_ID")
public int getDateId() {
return dateId;
}
public void setDateId(int dateId) {
this.dateId = dateId;
}
@ManyToMany
@Cascade(org.hibernate.annotations.CascadeType.ALL)
@JoinTable(name="USER_CARS_JOINTABLE",
joinColumns=@JoinColumn(name="CARS_ID"),
inverseJoinColumns=@JoinColumn(name="USER_ID"))
public User username;
//set and get methods omitted
}
如您所见,我在 USER 和 CARS 之间有一个 JoinTable“USER_CARS_JOINTABLE”,其中包含 User 和 Cars 表上的 FK。
我还将有表DESCRIPTION和实体类的名称描述:
@Entity
@Column(name="DESCRIPTION")
public class Description{
private int id;
@Id
@GeneratedValue(strategy=IDENTITY)
@Column(name="ID")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
private String color;
private String size;
private String speed;
private String type;
//set and get methods omitted
}
我的 JoinTable USER_CARS_JOINTABLE 是:
USER_ID INT NOT NULL,CARS_ID INT NOT NULL,DESCRIPTION_ID INT NOT NULL,主键(INSTITUTION_ID,DATE_ID,SRC_ID),约束 FK_USER_ID_IN_USER_CARS 外键(USER_ID)参考用户(ID),约束 FK_CARS_ID_IN_USER_CARS 外键(ID)参考 CA , CONSTRAINT FK_DESCRIPTION_ID_IN_USER_CARS FOREIGN KEY(DESCRIPTION_ID) REFERENCES DESCRIPTION(ID)
在我的情况下,用户可以拥有很多汽车,一种汽车可以属于多个用户。同样的汽车也可以有不同的描述。在类 Description 和 User Entity 和 Cars 实体之间,我将有一个 Undirected、JoinTable、OneToMany 关系。这意味着类 User 和 Cars 将知道 Description 类,但 Description 将不知道 User 和 Cars。当我尝试将数据从用户端到类 Cars 和类描述中设置到我的数据库中时,我将遇到如下异常:
休眠:插入到 USER_CARS_JOINTABLE(用户 ID,描述)值(?,?)错误:org.hibernate.util.JDBCExceptionReporter - 字段“Cars_ID”没有默认值错误:org.hibernate.event.def.AbstractFlushingEventListe ner -无法将数据库状态与会话同步
如果我从 Cars 方面执行此操作,我将遇到如下错误:
Hibernate:插入到 USER_CARS_JOINTABLE(Cars_ID,描述)值(?,?)错误:org.hibernate.util.JDBCExceptionReporter - 字段'User_ID'没有默认值错误:org.hibernate.event.def.AbstractFlushingEventListe ner -无法将数据库状态与会话同步
这意味着我的一些外键 JoinTable USER_CARS_JOINTABLE 没有获得 ID,因为我从无法生成或插入数据到这个可连接 USER_CARS_JOINTABLE 的一侧插入它,我不知道为什么?
如果我将为我的一些外键(如 User_ID 或 Cars_ID)添加到我的 JoinTable 数据库模式中,则默认“数字”比它有效,它是插入数据,但它总是会插入相同的数字,我输入“数字” . 但我想要的是,为我在 joinTable USER_CARS_JOINTABLE 中的一个问题外键提供与父表 User 或 Cars 相同的值!!!也许我可以在我的实体类中为我的 JoinTable 使用 Hibernate 中的一些 @Generator 注释。
谢谢你。