Java 级联未在休眠状态下正常工作
在下面给出的代码中,cascade=“save update”用于与学生类关联的课程类(bag) 学生班是--> 学生的hbm文件是-->Java 级联未在休眠状态下正常工作,java,mysql,hibernate,hbm,Java,Mysql,Hibernate,Hbm,在下面给出的代码中,cascade=“save update”用于与学生类关联的课程类(bag) 学生班是--> 学生的hbm文件是--> 为什么课程表中的列显示空值,而不是保留学生的id???从您的包映射中删除inverse=“true”,否则此关系的所有者将是课程而不是学生。效果很好,但每当我听到这个词inverse=“true”,大多数情况下,我发现自己走错了方向,原因是我从来没有足够清楚地理解这个属性为什么和如何工作,我只知道,每当存在一对多关系时,它总是应该进入“多”的声明中。如果可能
为什么课程表中的列显示空值,而不是保留学生的id???从您的包映射中删除
inverse=“true”
,否则此关系的所有者将是课程而不是学生。效果很好,但每当我听到这个词inverse=“true”,大多数情况下,我发现自己走错了方向,原因是我从来没有足够清楚地理解这个属性为什么和如何工作,我只知道,每当存在一对多关系时,它总是应该进入“多”的声明中。如果可能的话,一定要帮我(一些链接或清晰的解释可能会有帮助)。
private int id;
private String firstName;
private String lastName;
private Address address;
private List<Course> courses;
private int id;
private String name;
private int unit;
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate.Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="pojos.Student" table="Student">
<id name="id" type="integer" column="ID">
<generator class="increment" />
</id>
<property name="firstName">
<column name="FIRST_NAME" />
</property>
<property name="lastName">
<column name="LAST_NAME" />
</property>
<many-to-one name="address"
class="pojos.Address"
column="ADDRESS_ID"
cascade="save-update" />
<bag name="courses" inverse="true" cascade="save-update">
<key column="STUDENT_ID" />
<one-to-many class="pojos.Course" />
</bag>
</class>
</hibernate-mapping>
Student stud = new Student("Ketan", "Dikshit");
Address address = new Address("Dm-Road", "Uttar Pradesh", "201301");
Course course1 = new Course("Core Java", 101);
Course course2 = new Course("Advanced Java", 201);
List<Course> courses = new ArrayList<Course>();
courses.add(course1);
courses.add(course2);
stud.setAddress(address);
stud.setCourses(courses);
try {
tr = session.beginTransaction();
System.out.println("\n Transaction has begun..!!");
session.save(stud);
tr.commit();
System.out.println("\n Transaction is Commit..!!");
session.close();
System.out.println("\n Session is Closed..!!");
} catch (Exception e) {
System.out.println("\n Transaction is in errror..!!");
tr.rollback();
System.out.println("\n Transaction is RollBack..!!");
session.close();
System.out.println("\n Session is Closed..!!");
}
Transaction has begun..!!
Hibernate: select max(ID) from Student
Hibernate: select max(ID) from Address
Hibernate: select max(ID) from Course
Hibernate: insert into Address (STREET, CITY, ZIPCODE, ID) values (?, ?, ?, ?)
Hibernate: insert into Student (FIRST_NAME, LAST_NAME, ADDRESS_ID, ID) values (?, ?, ?, ?)
Hibernate: insert into Course (NAME, UNIT, ID) values (?, ?, ?)
Hibernate: insert into Course (NAME, UNIT, ID) values (?, ?, ?)
Transaction is Commit..!!