У меня есть два класса, которые имеют однонаправленное отношение «один ко многим» друг с другом.
public class Offer{
...
@OneToMany(cascade=CascadeType.ALL)
@JoinTable(name = "Offer_Fields",
joinColumns =
@JoinColumn(name = "OFFER_ID"),
inverseJoinColumns =
@JoinColumn(name = "FIELDMAPPER_ID"))
private Set<FieldMapper> fields = new HashSet<FieldMapper>();
}
@Entity
@Table(name = "FieldMapper")
public class FieldMapper implements Serializable {
@Id
@Column(name = "FIELDMAPPER_ID")
@GeneratedValue
private int id;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "multilingual_field_fk")
private MultiLingual field;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "multilingual_value_fk")
private MultiLingual value;
}
Я хочу сохранить предложение с набором FieldMapper в базе данных.Когда я использую CascadeType.ALL в своей OneToMany, я получаю эту ошибку:
org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions
, а когда я изменяю CascadeType на что-то другое, я получаю эту ошибку:
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.RCSTT.library.FieldMapper
и вот гдеЯ сохраняю предложение:
public void insert(Offer offer) throws SQLException {
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
session.save(offer);
tx.commit();
session.close();
}
и не использую сессию где-то еще.
в tx.commit();
строки бросают объясненные исключения.
Спасибо за вашу помощь.