Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在hibernate中映射自动增量非主键_Java_Spring Mvc_Annotations_Hibernate Mapping - Fatal编程技术网

Java 在hibernate中映射自动增量非主键

Java 在hibernate中映射自动增量非主键,java,spring-mvc,annotations,hibernate-mapping,Java,Spring Mvc,Annotations,Hibernate Mapping,我有一个teacher表,其中包含一个主键teacher\u UNIQUE\u ID和另一个带有索引teacher\u ID的自动递增键。 现在我必须将自动递增键映射到另一个表,即SUBJECT。我使用了下面的代码,但在主题类中总是将教师ID设置为null 我希望它插入具有实际自动递增教师ID的主题表 public class Teacher { @Id @Column(name = "TEACHER_UNIQUE_ID") private String teacherUniqueId

我有一个teacher表,其中包含一个主键teacher\u UNIQUE\u ID和另一个带有索引teacher\u ID的自动递增键。 现在我必须将自动递增键映射到另一个表,即SUBJECT。我使用了下面的代码,但在主题类中总是将教师ID设置为null

我希望它插入具有实际自动递增教师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;
}

}
还有这个

@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "TEACHER_ID", unique = true)
private Long teacherId;
不走运。谁能告诉我这里缺少什么。

要解决此问题: “我希望它插入具有实际自动递增教师ID的主题表。”

我建议在数据库中保留一个sequence对象以手动跟踪增量

要使用Hibernate自动生成ID,请执行以下操作:

1)在数据库开发人员(SQL开发人员)中创建序列对象

2)将此代码添加到id变量:

@Id
@列(name=“ID”)
@GeneratedValue(策略=GenerationType.SEQUENCE,generator=“一”)
@SequenceGenerator(name=“一”,sequenceName=“一”,allocationSize=1)

int-id您的数据库中教师ID字段是否设置为自动递增?@Harry Coder是的,教师ID设置为自动递增,以DB为单位。在您的代码中,我看到@\ID,它用于主键。我想设置非主键的autonumber。Hibernate在一个bean/表映射中只能自动递增一个主键。因此,您需要保留一个序列来跟踪数字,然后将其添加到所需的列中。映射序列和列的方法:()看看这是否有效,同时我将尝试寻找其他方法。
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "TEACHER_ID", unique = true)
private Long teacherId;