Я новичок в Hibernate, и я изо всех сил пытался сохранить родительский объект без сохранения дочернего объекта (потому что он уже сохранен и был ранее загружен).
Я пытался найти помощь на многих разных интернет-сайтах, но мне не повезло найти тот, который явно имел отношение к моей проблеме. Надеюсь, вы, ребята, можете помочь.
Представьте себе следующий сценарий:
У меня есть объект (TableA), который ссылается на другой объект (TableB).
@Entity
@Table(name = "A")
public class TableA implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@Column(name="idtablea")
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@GeneratedValue(generator="IdBGenerator")
@GenericGenerator(name="IdBGenerator", strategy="foreign",
parameters=@Parameter(value="tableB", name="property"))
private int idb;
@OneToOne
@JoinColumn(name = "idtableb", insertable = false, updatable = false)
private TableB tableB;
//other properties
//constructors
//getters and setters
}
и объект TableB определяется следующим образом:
@Entity
@Table(name = "B")
public class TableB implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@Column(name = "idtableb")
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
//other properties
//constructors
//getters and setters
}
Я создаю экземпляр TableA со ссылкой на экземпляр TableB.
Теперь я хочу сохранить TableA в базе данных (таблица A) и связать ее с таблицей B без сохранения TableB (поскольку она была сохранена в предыдущей транзакции). Для этого я использую следующий код:
Session session = this.sessionFactory.openSession();
Transaction tx = session.beginTransaction();
session.persist(TableA);
tx.commit();
session.close();
Каждый раз, когда приведенный выше код выполняется, при попытке зафиксировать транзакцию возникает следующее исключение:
Серьезный: org.hibernate.TransientObjectException: объект ссылается на несохраненный временный экземпляр — сохраните временный экземпляр перед сбросом: com.mypackage.TableB
Не могли бы вы помочь мне понять проблему здесь? Заранее спасибо.
Я использую Java 8, Hibernate 3.6.8 и Spring 4.1.5.