- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个名为学生和类(class)的实体,它们具有多对多关系。正如我在this中读到的那样文章中我们可以调用 save 方法来保存事务中的相关实体,或者一旦 session 被刷新它就会被保存。我也明白typical cascading problem这会导致此异常,但在这里我也处理了它,但仍然在调用 save 方法时遇到 TransientObjectException,而 persist 方法工作得很好。有人可以解释一下这里发生了什么吗?
这是我的代码:
SaveVsPersistTest.java
public class SaveVsPersistTest {
public static void main(String[] args) {
// Create session factory object
SessionFactory sessionFactory = new Configuration()
.configure("hibernate.cfg.xml")
.addAnnotatedClass(Student.class)
.addAnnotatedClass(Course.class)
.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Student student = new Student("Gopal");
Course course1 = new Course("Java");
Course course2 = new Course("C++");
student.addCourse(course1);
student.addCourse(course2);
session.save(student);
transaction.commit();
session.flush();
}
}
Student.java
@Entity
@Table(name="student")
public class Student {
public Student() {
}
public Student(String name) {
super();
this.name = name;
}
@Id
@Column(name="student_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@Column(name="student_name")
private String name;
@ManyToMany(cascade={CascadeType.DETACH,CascadeType.REFRESH,CascadeType.PERSIST,CascadeType.MERGE})
@JoinTable(name="student_course",
joinColumns={@JoinColumn(name="student_id")},
inverseJoinColumns={@JoinColumn(name="course_id")})
private List<Course> courseList;
public void addCourse(Course tempcourse) {
if(courseList == null){
courseList= new ArrayList<>();
}
courseList.add(tempcourse);
}
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 List<Course> getCourseList() {
return courseList;
}
public void setCourseList(List<Course> courseList) {
this.courseList = courseList;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", courseList=" + courseList + "]";
}
}
类(class).java
@Entity
@Table(name="course")
public class Course {
public Course() {
}
public Course(String courseTitle) {
super();
this.courseTitle = courseTitle;
}
@Id
@Column(name="course_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@Column(name="course_title")
private String courseTitle;
@ManyToMany(cascade={CascadeType.DETACH,CascadeType.REFRESH,CascadeType.PERSIST,CascadeType.MERGE})
@JoinTable(name="student_course",
joinColumns={@JoinColumn(name="course_id")},
inverseJoinColumns={@JoinColumn(name="student_id")})
private List<Student> StudentList;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCourseTitle() {
return courseTitle;
}
public void setCourseTitle(String courseTitle) {
this.courseTitle = courseTitle;
}
public List<Student> getStudentList() {
return StudentList;
}
public void setStudentList(List<Student> studentList) {
StudentList = studentList;
}
@Override
public String toString() {
return "Course [id=" + id + ", courseTitle=" + courseTitle + ", StudentList=" + StudentList + "]";
}
}
异常
Exception in thread "main" org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: manytomany.demo.Course
最佳答案
正如其他人建议的,您可以显式地在所有相关实体上调用 session.save,或者您可以使用 Hibernate Specific @Cascade注释如下所示。
@Cascade(CascadeType.SAVE_UPDATE)
在任何关联上使用 cascade={CascadeType.ALL}
时需要注意的是,一旦对父对象调用 delete,所有子对象(或表中的行)都会被删除。所以要谨慎一点。
关于java - Session.save 抛出 TransientObjectException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51819758/
我正在使用以下代码来初始化我的 Hibernate 搜索索引: EntityManager em = ... FullTextEntityManager fullTextEM = Search.get
这与this post有关,您将在其中找到许多我的配置。 ldap用户被映射到数据库用户表,并且条目创建良好。然后,userDetails尝试从主用户类获取权限,从而导致以下异常: 2014-01-3
我试图在 Tridion 中发布一个页面,并在“提交部署”阶段不断收到以下 NHibernate 异常: Retried 10 times to commit and failed, org.hibe
我有一个错误让我发疯。当我尝试创建新对象时,Hibernate 返回错误: object references an unsaved transient instance - save the tra
当我尝试更新对象时出现以下异常: org.hibernate.TransientObjectException: object references an unsaved transient inst
我有两个类: Employee.java @Entity @Table public class Employee { @Id @GeneratedValue private
每当我进行连续保存时,我都会收到 TransientObjectException;我在第一次保存或刷新屏幕/页面时没有收到此错误。这让我很困惑,因为一旦对象被成功保存,它就不应该是暂时的,因为它在我
简单的Groovy \ Grails代码: def start = { source.save() def result = getJson(hotelSite, en
当我尝试保留对象 Municipio 时,出现异常。Municipio 与 Provincia 具有多音关系,与 Sector 具有多对一关系。Provincia 不能为 null,但 Sector
我有一个像这样的对象层次结构(忽略所有字段,如 id、setters/getters 等): @Entity class A { @OneToOne(cascade=CascadeType.A
我使用的是 Hibernate 4.1,每当我尝试存储已添加到对象集合中的临时标记列表时,我都会收到以下异常。 org.hibernate.TransientObjectException: obje
我有两个名为学生和类(class)的实体,它们具有多对多关系。正如我在this中读到的那样文章中我们可以调用 save 方法来保存事务中的相关实体,或者一旦 session 被刷新它就会被保存。我也明
@Entity @Table(name = "PE_HOME") @Cacheable public class Home extends DefEntity implements IHome {
我的应用程序通过套接字连接接收频繁的远程事件,每次都启动一个新线程,后续操作通常每次都会触发相同的对象图进行保存,并带有一个锁定的静态 session 。但是在执行保存时,有时会收到新的更新,这会将新
我正在将 jpa 与 play 框架一起使用。我有一个实体 JobseekerDetails @Entity public class JobseekerDetails { @Id @
使用 spring-boot (2.1.8.RELEASE),我有一个看起来像这样的测试: @Test @Transactional public void myTest()
在使用 hibernate 更新记录时,我不断收到以下异常,我对 hibernate 非常陌生,请查看该异常跟踪 java.lang.IllegalStateException: org.hibern
我在一个使用 Hibernate Entity Manager 的项目中工作,一切都很好,直到我开始在我们的实体中实现乐观锁。 例如,我们有以下命名查询返回一个人的地址: @NamedQuery(na
我在 hibernate 状态下有一对多关系,如下所示: class Container { @OneToMany( cascade = {CascadeType.ALL}, mappedBy
我有 2 个类 Employe(id,Nom,solde...) 和 Conge(id,duree,...) 我使用注释,并在我的测试类中放置此代码来更新员工的“solde”: Employe p=n
我是一名优秀的程序员,十分优秀!