我有两个实体 Student
和 Group
.有一个名为 StudentGroup
的第三个实体其中包含对 Student
的引用, 对 Group
的引用和一个 Date
字段。
我尝试在 Student
之间实现一对多关系& StudentGroup
, 多对一 反之亦然。同样的想法适用于 Group
& StudentGroup
.
Student
类:
@Entity
@Table(name = "student")
public class Student {
@Id @GeneratedValue
private int sid;
@OneToMany(mappedBy = "student", cascade = CascadeType.ALL)
private Set<StudentGroup> studentGroups;
//Setter & Getter
}
Group
类:是:
@Entity
@Table(name = "group")
public class Group {
@Id @GeneratedValue
private int gid;
@OneToMany(mappedBy = "group", cascade = CascadeType.ALL)
private Set<StudentGroup> studentGroups;
//Setter & Getter
}
StudentGroup
类::
@Entity
@Table(name = "student_groups")
public class StudentGroup {
@Id @GeneratedValue
private int id;
@Column(name = "lastChanged")
private Timestamp lastChanged;
@ManyToOne
@JoinColumn(name="sid")
private Student student;
@ManyToOne
@JoinColumn(name="gid")
private Group group;
//Setter & Getter
}
映射定义:
<mapping class="com.my.db.Student" />
<mapping class="com.my.db.Group" />
<mapping class="com.my.db.StudentGroup" />
当我启动我的 tomcat 服务器时,我总是得到以下错误:
org.hibernate.HibernateException: Missing table: student_student_groups
at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1302)
at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:155)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:509)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1790)
为什么服务器试图找到 student_student_groups
我没有在任何地方定义的表格?
最佳答案
在 JPA 中,如果您没有注释您与 @JoinColumn
的关系,则为关系之间的连接创建一个连接表,在您的情况下是 student
和 之间的连接表>student_groups
应该存在,如果你添加 hibernate.hbm2ddl.auto
属性设置为 create
也创建了一个连接表,但是如果你想避免使用连接表你可以在你的关系中使用@JoinColumn
注解:
例如:
@OneToMany
@JoinColumn(name="COLUMN_NAME")
关于sql - 一对多 多对一映射,服务器试图找到一个不存在的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20804992/