Java 休眠关系可以';在注释方式上找不到外键
我不熟悉hibernate尝试精益hibernate关系并拥有两张桌子, 关系是一对多的Java 休眠关系可以';在注释方式上找不到外键,java,sql,spring,hibernate,Java,Sql,Spring,Hibernate,我不熟悉hibernate尝试精益hibernate关系并拥有两张桌子, 关系是一对多的 create table student( id bigint primary key auto_increment, name varchar(20), student_class_id bigint foreign key references student_class(id) ) create table student_class( id bigint
create table student(
id bigint primary key auto_increment,
name varchar(20),
student_class_id bigint foreign key references student_class(id)
)
create table student_class(
id bigint primary key auto_increment,
name varchar(20)
)
spring sessionFactory bean已配置packageToScan实体
这是实体类:
@Table(name = "students")
@Entity
public class Student {
private Integer id;
private Integer name;
private StudentClass studentClass;
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "name")
public Integer getName() {
return name;
}
public void setName(Integer name) {
this.name = name;
}
@OneToOne
@JoinColumn(name = "student_class_id")
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
public StudentClass getStudentClass() {
return studentClass;
}
// setter getter
}
@Entity
@Table(name = "student_class")
public class StudentClass {
private Integer id;
private String name;
private Set<Student> students = new HashSet<Student>();
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
@OneToMany(mappedBy = "studentClass", cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
public Set<Student> getStudents() {
return students;
}
/setter getter
}
我是两个实体的关系似乎是正确的,学生实体使用studentClass
属性引用studentClass
实体您的SQL:
create table student(
你们班:
@Table(name = "students")
private Integer name;
这些名字需要匹配。即使是一个字符也会产生很大的不同
SQL中的另一个问题:
name varchar(20),
你们班:
@Table(name = "students")
private Integer name;
类型也需要匹配。我相信你的意思是在课堂上使用字符串而不是整数