Java 在OneToMany的情况下,不进行数据库插入

Java 在OneToMany的情况下,不进行数据库插入,java,spring,hibernate,Java,Spring,Hibernate,我想使用@OneToMany关系在数据库中插入数据,但它不起作用 我有两个表,其模式如下: 创建表讲师(Id int主键,名称varchar2(50),电子邮件varchar2(15)) 创建表课程(课程Id int主键,课程名称Varchar2(20)非空唯一,讲师Id int,外键(讲师Id)引用讲师(Id)) 当我尝试在db中插入时,它不会给我任何错误,但在db中,它不会对这两个表进行反射 课程: @Entity @Table(name = "Courses") public class

我想使用@OneToMany关系在数据库中插入数据,但它不起作用

我有两个表,其模式如下:

创建表讲师(Id int主键,名称varchar2(50),电子邮件varchar2(15))

创建表课程(课程Id int主键,课程名称Varchar2(20)非空唯一,讲师Id int,外键(讲师Id)引用讲师(Id))

当我尝试在db中插入时,它不会给我任何错误,但在db中,它不会对这两个表进行反射

课程:


@Entity
@Table(name = "Courses")
public class Courses {

    @Id
    @Column(name = "Course_Id ")
    private int courseId;

    @Column(name = "Course_Name")
    private String courseName;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "Instructor_Id")
    private Instructor instructor;

    public int getCourseId() {
        return courseId;
    }

    public void setCourseId(int courseId) {
        this.courseId = courseId;
    }

    public String getCourseName() {
        return courseName;
    }

    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }

    public Instructor getInstructor() {
        return instructor;
    }

    public void setInstructor(Instructor instructor) {
        this.instructor = instructor;
    }

}
讲师:

@Entity
@Table(name = "Instructor")
public class Instructor {

    @Id
    @Column(name = "Id")
    private int id;

    @Column(name = "Name")
    private String name;

    @Column(name = "Email")
    private String email;

    @OneToMany(mappedBy = "instructor", cascade = CascadeType.ALL)
    private List<Courses> courses;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public List<Courses> getCourses() {
        return courses;
    }

    public void setCourses(List<Courses> courses) {
        this.courses = courses;
    }

    public void setEmail(String string) {
        this.email = string;
    }


@实体
@表(name=“讲师”)
公开课教师{
@身份证
@列(name=“Id”)
私有int-id;
@列(name=“name”)
私有字符串名称;
@列(name=“Email”)
私人字符串电子邮件;
@OneToMany(mappedBy=“讲师”,cascade=CascadeType.ALL)
私人名单课程;
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getEmail(){
回复邮件;
}
公开课程名单{
返回课程;
}
公共课程(列出课程){
本课程=课程;
}
公共无效设置电子邮件(字符串){
this.email=string;
}
主要类别:

public class HibernateTest {

    public static void main(String[] args) {

        try (SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
                .addAnnotatedClass(Courses.class).addAnnotatedClass(Instructor.class).buildSessionFactory();) {


            //Test Insert
            Instructor i1 = new Instructor();
            i1.setEmail("test@mail.com");
            i1.setId(100);
            i1.setName("patcyy");

            //List Of Courses
            List<Courses> listOfCourses = new ArrayList<>();

            Courses c1 = new Courses();
            c1.setCourseName("Java");
            c1.setCourseId(1);

            Courses c2 = new Courses();
            c2.setCourseName("C");
            c2.setCourseId(2);

            listOfCourses.add(c1);
            listOfCourses.add(c2);

            //adding to instructor
            i1.setCourses(listOfCourses);

            //insert in DB
            inserIntoDb(factory, i1);

        } catch (Exception e) {
            System.out.println("Exception : " + e);
        }

    }

    /**
     * 
     * @param factory
     * @param st
     */
    private static void inserIntoDb(SessionFactory factory, Instructor st) {

        System.out.println("Inserting into DB");

        Session session = factory.getCurrentSession();

        session.beginTransaction();

        session.save(st);

        session.getTransaction().commit();

    }
}

公共类HibernateTest{
公共静态void main(字符串[]args){
try(SessionFactory=newconfiguration().configure(“hibernate.cfg.xml”)
.addAnnotatedClass(Courses.class).addAnnotatedClass(讲师.class).buildSessionFactory();){
//测试插入
讲师i1=新讲师();
i1.设置电子邮件(“test@mail.com");
i1.setId(100);
i1.设置名称(“patcyy”);
//课程表
List-listOfCourses=new-ArrayList();
课程c1=新课程();
c1.setCourseName(“Java”);
c1.setCourseId(1);
课程c2=新课程();
c2.setCourseName(“C”);
c2.setCourseId(2);
课程列表。添加(c1);
课程列表。添加(c2);
//添加到讲师
i1.设置课程(课程列表);
//在数据库中插入
inserIntoDb(工厂,i1);
}捕获(例外e){
System.out.println(“异常:+e”);
}
}
/**
* 
*@param工厂
*@param街
*/
inserIntoDb中的专用静态无效(SessionFactory工厂,讲师st){
System.out.println(“插入数据库”);
Session Session=factory.getCurrentSession();
session.beginTransaction();
session.save(st);
session.getTransaction().commit();
}
}
日志:



May 13, 2019 8:35:24 AM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.4.2.Final}
May 13, 2019 8:35:25 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
May 13, 2019 8:35:25 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
May 13, 2019 8:35:25 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [oracle.jdbc.driver.OracleDriver] at URL [jdbc:oracle:thin:@localhost:1521:****]
May 13, 2019 8:35:25 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {user=****, password=****}
May 13, 2019 8:35:25 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
May 13, 2019 8:35:25 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 1 (min=1)
May 13, 2019 8:35:25 AM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.Oracle12cDialect
Inserting into DB
Hibernate: select courses_.Course_Id, courses_.Course_Name as Course_Name2_0_, courses_.Instructor_Id as Instructor_Id3_0_ from Courses courses_ where courses_.Course_Id=?
Hibernate: select courses_.Course_Id, courses_.Course_Name as Course_Name2_0_, courses_.Instructor_Id as Instructor_Id3_0_ from Courses courses_ where courses_.Course_Id=?
Hibernate: insert into Instructor (Email, Name, Id) values (?, ?, ?)


2019年5月13日上午8:35:24 org.hibernate.Version日志版本
信息:hh000412:Hibernate核心{5.4.2.Final}
2019年5月13日上午8:35:25 org.hibernate.annotations.common.reflection.java.JavaReflectionManager
信息:HCANN000001:Hibernate Commons注释{5.1.0.Final}
2019年5月13日上午8:35:25 org.hibernate.engine.jdbc.connections.internal.driverManager连接提供MPL配置
警告:HHH10001002:使用Hibernate内置连接池(不用于生产!)
2019年5月13日上午8:35:25 org.hibernate.engine.jdbc.connections.internal.driverManager连接ProviderImpl buildCreator
信息:HHH10001005:在URL[jdbc:oracle:thin:@localhost:1521:***]处使用驱动程序[oracle.jdbc.driver.OracleDriver]
2019年5月13日上午8:35:25 org.hibernate.engine.jdbc.connections.internal.driverManager连接ProviderImpl buildCreator
信息:HHH10001001:连接属性:{user=**,password=**}
2019年5月13日上午8:35:25 org.hibernate.engine.jdbc.connections.internal.driverManager连接ProviderImpl buildCreator
信息:HHH10001003:自动提交模式:错误
2019年5月13日上午8:35:25 org.hibernate.engine.jdbc.connections.internal.driverManager连接ProviderImpl$PooledConnections
信息:HH000115:休眠连接池大小:1(最小值=1)
2019年5月13日上午8:35:25 org.hibernate.dialogue.dialogue
信息:HH000400:使用方言:org.hibernate.dial.Oracle12cDialect
插入数据库
休眠:从课程中选择课程\课程\课程Id、课程\课程\课程名称作为课程\课程名称2 \课程0 \课程\讲师\课程Id作为讲师\课程Id 3 \课程Id=?
休眠:从课程中选择课程\课程\课程Id、课程\课程\课程名称作为课程\课程名称2 \课程0 \课程\讲师\课程Id作为讲师\课程Id 3 \课程Id=?
Hibernate:在讲师(电子邮件、姓名、Id)中插入值(?,,?)
更新代码:

package com.patcyy.hibernate;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateTest {

     public static void main(String[] args) {

            try (SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
                    .addAnnotatedClass(Courses.class).addAnnotatedClass(Instructor.class).buildSessionFactory();) {


                //Test Insert
                Instructor i1 = new Instructor();
                i1.setEmail("test@mail.com");
                i1.setId(100);
                i1.setName("patcyy");

                //List Of Courses
                List<Courses> listOfCourses = new ArrayList<>();

                Courses c1 = new Courses();
                c1.setCourseName("Java");
                c1.setCourseId(1);
                c1.setInstructor(i1);

                Courses c2 = new Courses();
                c2.setCourseName("C");
                c2.setCourseId(2);
                c2.setInstructor(i1);

                listOfCourses.add(c1);
                listOfCourses.add(c2);

                //adding to instructor
                i1.setCourses(listOfCourses);

                //insert in DB
                inserIntoDb(factory, i1);

            } catch (Exception e) {
                System.out.println("Exception : " + e);
            }

        }

        /**
         * 
         * @param factory
         * @param st
         */
        private static void inserIntoDb(SessionFactory factory, Instructor st) {

            System.out.println("Inserting into DB");

            Session session = factory.getCurrentSession();

            session.beginTransaction();

            session.save(st);

            session.getTransaction().commit();

        }
}

package com.patcyy.hibernate;
导入java.util.ArrayList;
导入java.util.List;
导入org.hibernate.Session;
导入org.hibernate.SessionFactory;
导入org.hibernate.cfg.Configuration;
公共类休眠测试{
公共静态void main(字符串[]args){
try(SessionFactory=newconfiguration().configure(“hibernate.cfg.xml”)
.addAnnotatedClass(Courses.class).addAnnotatedClass(讲师.class).buildSessionFactory();){
//测试插入
讲师i1=新讲师();
i1.设置电子邮件(“test@mail.com");
i1.setId(100);
i1.设置名称(“patcyy”);
//课程表
List-listOfCourses=new-ArrayList();
课程c1=新课程();
c1.setCourseName(“Java”);
c1.setCourseId(1);
c1.教师(i1);
课程c2=新课程();
c2.setCourseName(“C”);
c2.setCourseId(2);
c2.训练导师(i1);
课程列表。添加(c1);
课程列表。添加(c2);
//添加到讲师
i1.设置课程(课程列表);

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- JDBC Database connection settings -->
        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:patcyy</property>
        <property name="connection.username">SYSTEM</property>
        <property name="connection.password">patcyy</property>

        <!-- JDBC connection pool settings ... using built-in test pool -->
        <property name="connection.pool_size">1</property>

        <!-- Select our SQL dialect -->
        <property name="dialect">org.hibernate.dialect.Oracle12cDialect</property>

        <!-- Echo the SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Set the current session context -->
        <property name="current_session_context_class">thread</property>

    </session-factory>

</hibernate-configuration>

addCourse(Course course) {
    if (!courses.contains(course)) {
        courses.add(course);
        course.setInstructor(this);
    }
}
setInstructor(Instructor instructor) {
    this.instructor = instructor;
    this.instructor.addCourse(this);
}
@Entity
@Table(name = "Instructor")
public class Instructor {

    @OneToMany(mappedBy = "instructor", cascade = CascadeType.ALL)
    private List<Courses> courses;
}
Courses c1 = new Courses();
c1.setCourseName("Java");
c1.setCourseId(1);
c1.setInstructor(i1);