java.lang.IllegalStateException:org.hibernate.transientPropertyValueException:object引用了一个未保存的瞬态实例-在刷新之前保存瞬态实例:entity.customer.passport->entity.passport
package entity;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
@Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@OneToOne(cascade = { CascadeType.MERGE })
@JoinColumn(name = "passport_id", unique = true)
private Passport passport;
public Customer() {
}
public Customer(String name, Passport passport) {
this.setName(name);
this.passport = passport;
}
public Passport getPassport() {
return passport;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package client;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import entity.Customer;
import entity.Passport;
public class OneToOneClient {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence
.createEntityManagerFactory("jpa-training");
EntityManager em = emf.createEntityManager();
EntityTransaction txn = em.getTransaction();
try {
em.getTransaction().begin();
//txn.begin();
Passport passport = new Passport("99627317");
Customer customer = new Customer("Customer1", passport);
em.persist(customer);
em.getTransaction().commit();
//txn.commit();
} catch (Exception e) {
if (txn != null) {
txn.rollback();
}
e.printStackTrace();
} finally {
if (em != null) {
em.close();
}
}
}
}
注意:如果我在实体类中使用CascadeType.Persist,我可以在DB中插入另一行。
在客户之前保存passport
,您就没事了。替代方案如您所提到的,使用cascade.persist
。
Hibernate不会在没有被告知的情况下持久化其他实体。
我有这个类,它致力于通过hibernate的持久层将数据持久化。 问题是它不持久化数据。 堆栈是: 但我必须注意的是,它在其他课堂上效果很好。 更新: 当我打印tx.isActive()时,它给我提供了false。 更新 我试图获取有关错误的更多信息: 我找到了问题所在: 事实上,表tlinkEquipment在同一个表中有2个fk,我保存了TEquipements的数据,然后保存了TEquipe
问题内容: 我有一个专门用于通过hibernate的持久层将数据持久保存在db中的类。 问题在于它不会持久保存数据。 堆栈是: 但我必须指出,它在其他课程中也能正常工作。 更新 : 当我印刷它给我的时候。 更新 我试图获得更多有关该错误的信息: 我知道问题出在哪里: 实际上,该表对同一张表有2 fk ,而我,我坚持的是 问题答案: 可能引发了异常。这意味着该子句中没有要回滚的活动事务。这就是为什么
在db会话监视器中,当这种情况发生时,我得到了一个不活动的事务。 我得到的错误如下: 问题是交易和连接应该自动打开和关闭...我希望并发修改失败的事务得到回滚...但似乎他们变得不活跃了。
问题内容: 我有一个专门用于通过休眠的持久层将数据持久保存在db中的类。 问题在于它不保留数据。 堆栈是: 但我必须指出,它在其他课程中也能正常工作。 更新 : 当我把它印出来的时候给我。 更新 我试图获得更多有关该错误的信息: 我知道问题出在哪里: 实际上,该表对同一张表有2 fk ,而我,我坚持的是 问题答案: 可能引发了异常。这意味着该子句中没有要回滚的活动事务。这就是为什么引发另一个异常(
问题内容: 我正在尝试使用Spring @Transactional批注,但是在调用方法 findAll 时遇到问题,并且出现以下错误: 人DAO: 这是我的: 我尝试删除此行,但是又出现了一个错误,为什么这行不通? 问题答案: 您必须明确声明对事务管理器注释的支持 添加到您的配置中: tx是xmlns:tx =“ http://www.springframework.org/schema/tx”