Hibernate-每行(@JoinColumn)中的列为空

Hibernate-每行(@JoinColumn)中的列为空,hibernate,hibernate-mapping,Hibernate,Hibernate Mapping,我对实体之间的关系有问题。。。我试图保存objectsubject,它包含测试对象的列表。在表主题中,我有id为“1”的主题。当我不使用cascade=CascadeType.ALL时,我没有进行表测试。当我使用cascade时,我得到了测试表,但每行的subject_id列都是NULL。我放弃了。我在哪里? 下面是我的代码 package com.mizio.model; import lombok.*; import javax.persistence.*; import java.util

我对实体之间的关系有问题。。。我试图保存objectsubject,它包含测试对象的列表。在表主题中,我有id为“1”的主题。当我不使用
cascade=CascadeType.ALL
时,我没有进行表测试。当我使用cascade时,我得到了测试表,但每行的subject_id列都是NULL。我放弃了。我在哪里? 下面是我的代码

package com.mizio.model;
import lombok.*;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Entity
@Table(name = "subjects")
public class Subject {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "subject_id",
        updatable = false,
        nullable = false)
private int subjectID;

@Column(name = "subject_name")
private String subjectName;

@OneToMany(mappedBy = "subject",
        targetEntity = Test.class,
        fetch= FetchType.LAZY,
        cascade = CascadeType.ALL)
private List<Test> tests = new ArrayList<>();

}

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test_generator?serverTimezone=UTC</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>
        <property name="connection_poolsize">1</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">create</property>
        <property name="current_session_context_class">thread</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <mapping class="com.mizio.model.Subject" />
        <mapping class="com.mizio.model.Test" />
    </session-factory>
</hibernate-configuration>

com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/test_generator?serverTimezone=UTC
根
根
1.
真的
创造
线
org.hibernate.dialogue.mysql5dialogue
我如何尝试我的代码:

public class Main {

    public static void main(String[] args) {

        //create session factory
        SessionFactory factory = new Configuration()
                                .configure("hibernate.cfg.xml")
                                .addAnnotatedClass(Subject.class)
                                .addAnnotatedClass(Test.class)
                                .buildSessionFactory();

        //create session
        Session session = factory.getCurrentSession();
        try{
            //use the session object to save Java object
            //create 3 student objectS
            System.out.println("Creating subject objectS...");
            Test test1 = Test.builder()
                    .testName("Test 1")
                    .build();
            Test test2 = Test.builder()
                    .testName("Test 2")
                    .build();
            List<Test> tests = new ArrayList<>();
            tests.add(test1);
            tests.add(test2);
            Subject subject1 = Subject.builder()
                    .subjectName("Przedmiot 1")
                    .tests(tests)
                    .build();

            //start a transaction
            session.beginTransaction();
            //save the student object
            System.out.println("Saving the subjectS...");
            session.save(subject1);
            //commit transaction
            session.getTransaction().commit();
            System.out.println("Done!");
        }
        finally {
            factory.close();
        }
    }
}
公共类主{
公共静态void main(字符串[]args){
//创建会话工厂
SessionFactory工厂=新配置()
.configure(“hibernate.cfg.xml”)
.addAnnotatedClass(Subject.class)
.addAnnotatedClass(Test.class)
.buildSessionFactory();
//创建会话
Session Session=factory.getCurrentSession();
试一试{
//使用会话对象保存Java对象
//创建3个学生对象
System.out.println(“创建主题对象…”);
test1=Test.builder()
.testName(“测试1”)
.build();
test2=Test.builder()
.testName(“测试2”)
.build();
列表测试=新建ArrayList();
tests.add(test1);
tests.add(test2);
Subject subject1=Subject.builder()
.受试者名称(“Przedmiot 1”)
.测试(测试)
.build();
//启动交易
session.beginTransaction();
//保存学生对象
System.out.println(“保存主题…”);
session.save(主题1);
//提交事务
session.getTransaction().commit();
System.out.println(“完成!”);
}
最后{
工厂关闭();
}
}
}
MySQL工作台结果:

[![测试表][2][2]

---------------------------------------------------------------------------------------------------------
[2] :

可能是因为自动生成的ID。试试这个

try {
  //use the session object to save Java object
  //create 3 student objectS
  System.out.println("Creating subject objectS...");

  //start a transaction
  session.beginTransaction();
  Subject subject1 = Subject.builder().subjectName("Przedmiot 1")
                    .build();
  System.out.println("Saving the subjectS...");
  session.save(subject1);
  //subject1 is now a managed identity and also should have an id
  System.out.println("Auto generated Id for subject1 : " 
                               + subject1.getSubjectID());
  Test test1 = Test.builder().testName("Test 1").setSubject(subject1)
               .build();
  Test test2 = Test.builder().testName("Test 2").setSubject(subject1)
               .build();
  List<Test> tests = new ArrayList<>();
  tests.add(test1);
  tests.add(test2);
  subject1.setTests(tests);
  // since subject1 is managed entity at this point and cascade is ALL,
  // all tests should be saved automatically
  session.getTransaction().commit();
  System.out.println("Done!");
}
finally {
  session.close();
   factory.close();
}
试试看{
//使用会话对象保存Java对象
//创建3个学生对象
System.out.println(“创建主题对象…”);
//启动交易
session.beginTransaction();
Subject subject1=Subject.builder().subjectName(“Przedmiot 1”)
.build();
System.out.println(“保存主题…”);
session.save(主题1);
//subject1现在是一个托管标识,并且应该有一个id
System.out.println(“自动生成的主题1的Id:”
+subject1.getSubjectID());
Test test1=Test.builder().testName(“Test 1”).setSubject(subject1)
.build();
Test test2=Test.builder().testName(“Test 2”).setSubject(subject1)
.build();
列表测试=新建ArrayList();
tests.add(test1);
tests.add(test2);
受试者1.设置测试(测试);
//因为此时subject1是托管实体,而cascade就是全部,
//所有测试都应自动保存
session.getTransaction().commit();
System.out.println(“完成!”);
}
最后{
session.close();
工厂关闭();
}
try {
  //use the session object to save Java object
  //create 3 student objectS
  System.out.println("Creating subject objectS...");

  //start a transaction
  session.beginTransaction();
  Subject subject1 = Subject.builder().subjectName("Przedmiot 1")
                    .build();
  System.out.println("Saving the subjectS...");
  session.save(subject1);
  //subject1 is now a managed identity and also should have an id
  System.out.println("Auto generated Id for subject1 : " 
                               + subject1.getSubjectID());
  Test test1 = Test.builder().testName("Test 1").setSubject(subject1)
               .build();
  Test test2 = Test.builder().testName("Test 2").setSubject(subject1)
               .build();
  List<Test> tests = new ArrayList<>();
  tests.add(test1);
  tests.add(test2);
  subject1.setTests(tests);
  // since subject1 is managed entity at this point and cascade is ALL,
  // all tests should be saved automatically
  session.getTransaction().commit();
  System.out.println("Done!");
}
finally {
  session.close();
   factory.close();
}