【发布时间】:2019-01-09 01:15:18
【问题描述】:
我有一个教师表,其中包含一个主键 TEACHER_UNIQUE_ID,以及另一个具有索引 TEACHER_ID 的 autoIncrement 键。 现在我必须将 autoIncrement 键映射到其他表,即 SUBJECT 。我使用了下面的代码,但这总是在主题类中将 TEACHER_ID 设置为 null。
我希望它插入具有实际 autoIncremented TEACHER_ID 的主题表。
public class Teacher {
@Id
@Column(name = "TEACHER_UNIQUE_ID")
private String teacherUniqueId;
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "TEACHER_ID", unique = true)
private Long teacherId;
-----
-----
@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER, mappedBy="teacher" ,orphanRemoval = true)
@Fetch(FetchMode.SELECT)
@MapKey(name = "fieldName")
private Map<String, subject> subjectInfo = new HashMap<>(0);
public Long getTeacherUniqueId() {
return teacherUniqueId;
}
public void setTeacherUniqueId(Long teacherUniqueId) {
this.teacherUniqueId = teacherUniqueId;
}
public Long getTeacherId() {
return teacherId;
}
public void setTeacherId(Long teacherId) {
this.teacherId = teacherId;
}
private void setField(String key, String value) {
subject subjectInfoData = subjectInfo.get(key);
if(subjectInfoData == null){
subjectInfoData = new subject();
subjectInfoData.setFieldName(key);
subjectInfo.put(key, subjectInfoData);
}
subjectInfoData.setTeacher(this);
**subjectInfoData.setId(this.getTeacherId());** -- its inserting null to id in SUBJECT table. i want it to insert actual TEACHER_ID got from TEACHER Table.
subjectInfoData.setFieldValue(value);
setAdditionalInfo(subjectInfo);
}
public String getCustomFieldValue(String fieldName) {
return subjectInfo.get(fieldName)!=null?subjectInfo.get(fieldName).getFieldValue():null;
}
public void setCustomFieldValue(String fieldName, String fieldValue) {
setField(fieldName, fieldValue);
}
public Map<String, Subject> getAdditionalInfo() {
return subjectInfo;
}
public void setAdditionalInfo(Map<String, Subject> subjectInfo) {
this.subjectInfo = subjectInfo;
}
}
除了 TEACHER_ID 之外的其他值正在正确插入。
我试过了
@GenericGenerator(name="generator", strategy="increment")
@GeneratedValue(generator="generator")
@Column(name = "TEACHER_ID", unique = true)
private Long teacherId;
还有这个
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "TEACHER_ID", unique = true)
private Long teacherId;
运气不好。谁能告诉我我在这里缺少什么。
【问题讨论】:
-
您的数据库中的 TEACHER_ID 字段是否设置为自动增量?
-
@Harry Coder 是的,TEACHER_ID 在 DB 中设置为自动递增。
标签: java spring-mvc annotations hibernate-mapping