sql - 一对多 多对一映射,服务器试图找到一个不存在的表

标签 sql database hibernate jakarta-ee jpa

我有两个实体 StudentGroup .有一个名为 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/

相关文章:

sql - PostgreSQL:额外列的性能影响

java - Hibernate 命名查询不知道错误

java - 如何在 Intellij IDEA 运行之前启用 Hibernate 字节码检测?

mysql - 计算重复列并更新计数器列

mysql - SQL - 在 UPDATE 语句中提供 AS 关键字

sql - 忽略存在于两个表 sql server 中的记录

javascript - localStorage/sessionStorage是否被视为NoSQL数据库?

sql - Postgresql 表存在,但查询时得到 "relation does not exist"

mysql - Web 应用程序的文件存储 : Filesystem vs DB vs NoSQL engines

java - NativeQuery 或 HibernateOGM 方法更好