У меня есть два класса Policy and Acl. В них есть отношения ManyToMany.hibernate - каскадный тип persist для многих для многих отношений
// Политика
public class PolicyEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "POLICY_ID")
private int policyId;
@Column(name = "POLICY_NAME")
private String policyName;
@ManyToMany(cascade = CascadeType.PERSIST)
@JoinTable(name = "POLICY_ACL",[email protected](name = "POLICY_ID"),
[email protected](name = "ACL_ID"))
private List<AclEntity> aclList = new ArrayList<AclEntity>();
}
// Acl
public class AclEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "ACL_ID")
private int aclId;
@Column(name = "ACL_NAME")
private String aclName;
@ManyToMany(mappedBy = "aclList")
private List<PolicyEntity> policyList = new ArrayList<PolicyEntity>();
}
Теперь, когда я использую каскадного типа, как сохраняются, то я получил следующее сообщение об ошибке:
Hibernate: insert into POLICY (POLICY_NAME, POLICY_ID) values (?, ?)
Hibernate: insert into POLICY_ACL (POLICY_ID, ACL_ID) values (?, ?)
Exception in thread "main" org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: hibernate.AclEntity
В то время как при использовании каскадный тип, как и все, тогда он успешно сохраняет объект политики и acl-объект. Я не могу понять, как это происходит. Примечание: Я просто выполняю операцию сохранения.
Вот основной код:
public static void main(String[] args) {
PolicyEntity policyEntity = new PolicyEntity();
AclEntity aclEntity = new AclEntity();
//policyEntity.setPolicyId(1);
policyEntity.setPolicyName("Policy 3");
//aclEntity.setAclId(1);
aclEntity.setAclName("Acl 3");
policyEntity.getAclList().add(aclEntity);
Configuration configuration = new Configuration().configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().
applySettings(configuration.getProperties());
SessionFactory sessionFactory = configuration.buildSessionFactory(builder.build());
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(policyEntity);
session.getTransaction().commit();
session.close();
}
Показать код вызывает этот вопрос – Chaitanya
Я обновил вопрос –
Добавлено ответ, попробуйте один раз – Chaitanya