簡體   English   中英

在休眠狀態下映射autoIncrement非主鍵

[英]Map autoIncrement non-primary key in hibernate

我有一個教師表,其中包含一個主鍵TEACHER_UNIQUE_ID,另一個包含帶有索引TEACHER_ID的autoIncrement鍵。 現在我必須將autoIncrement鍵映射到其他表,即SUBJECT。 我已經使用了以下代碼,但是在主題類中,這始終將TEACHER_ID設置為null。

我希望它插入帶有實際autoIncremented TEACHER_ID的Subject表。

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;

沒運氣。 誰能告訴我我在這里想念的東西。

解決此問題的方法:“我希望它插入帶有實際autoIncremented TEACHER_ID的Subject表。”

我建議在數據庫中保留一個序列對象以手動跟蹤增量。

要使用Hibernate自動生成ID,請執行以下操作:

1)在數據庫開發人員(SQL開發人員)中創建一個序列對象。

2)將此代碼添加到id變量中:

  @Id @Column(name = "ID") @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ONE") @SequenceGenerator(name = "ONE", sequenceName = "ONE", allocationSize =1) int id; 

3) 'ONE'是序列的名稱,我已經創建了您可以隨意命名的名稱,分配大小是數字的增量。

4)將值插入數據庫(教師ID)時,發送0代替Id,Hibernate將自動轉換序列號中的值。 現在,您可以使用此數字填充主題表。

注意:在教師表中插入新對象時,將返回ID。 使用該ID可以填充“主題”表。 有時最好以舊方式進行操作,而不是使用spring之前已提供的注釋。

希望這可以節省您的時間!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM