java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: объект ссылается на несохраненный переходный экземпляре - сохранить переходный экземпляр перед промывкой: entity.Customer.passport -> entity.Passportjava.lang.IllegalStateException: Сделка не активен
Получаем эту ошибку при попытке продолжить использование hybernate. Ниже мой Клиент Entity Calss
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;
}
}
Ниже мой основной метод, где я создаю мой EntityManager фабричные питания.
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 в моем классе сущности я могу иметь возможность вставить другую строку в БД.