本文介绍了一对多休眠映射中未更新外键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
@Entity
@Table(name="user")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="PK_USER_ID")
private Integer userId;
@Column(name="FIRST_NAME")
private String firstName;
@Column(name="LAST_NAME")
private String lastName;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn(name="FK_USER_ID",referencedColumnName="PK_USER_ID")
private Set<DeviceInfo> deviceInfos;
}
@Entity
@Table(name="device_info")
public class DeviceInfo {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="DEVICE_ID")
private Integer deviceId;
@Column(name="DEVICE_KEY")
private String deviceKey;
@Column(name="FK_USER_ID")
private Integer userId;
}
当我尝试将数据插入到用户表和device_info表中时,会插入数据,但device_info表的外键列未使用用户表的主键更新.
When i try to insert data into user table and device_info table, data is inserted but foreign key column of device_info table not updated with primary key of user table.
休眠版本:4.3.6.Final春季版本:4.3.1
Hibernate version:4.3.6.FinalSpring version :4.3.1
推荐答案
我认为您的实体DeviceInfo中缺少@ManyToOne映射
I think @ManyToOne mapping is missing in your entity DeviceInfo
@Entity
@Table(name="user")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="PK_USER_ID")
private Integer userId;
@Column(name="FIRST_NAME")
private String firstName;
@Column(name="LAST_NAME")
private String lastName;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY, mappedBy = "user")
private Set<DeviceInfo> deviceInfos;
}
DeviceInfo.java
@Entity
@Table(name="device_info")
public class DeviceInfo {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="DEVICE_ID")
private Integer deviceId;
@Column(name="DEVICE_KEY")
private String deviceKey;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PK_USER_ID", nullable = false)
private User user;
}
这篇关于一对多休眠映射中未更新外键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!