Transactions Ejb3 CMT未提交外键约束
我正在尝试进行一项交易:Transactions Ejb3 CMT未提交外键约束,transactions,foreign-keys,ejb-3.0,Transactions,Foreign Keys,Ejb 3.0,我正在尝试进行一项交易: 创建一个客户端 创建具有外键的地址到客户端表 将客户端的合成外键更新到地址表 问题: 运行testMethod()时,我得到一个java.sql.SQLIntegrityConstraintViolationException 关于地址的限制 如果我在一个事务中更改代码并创建客户机,然后在另一个事务中创建地址并更新客户机字段,则一切正常 如果我更改代码,在一个事务中创建客户机和地址,并在另一个事务中更新客户机字段,那么一切都会正常工作 如果我使用nativequerie
@Stateless
public class Test implements TestLocal {
@PersistenceContext(unitName = "testPU")
private EntityManager em;
@Override
public void testMethod(Client client, Address address, boolean mainAddress) {
client.setIdcliente(new Long(110));
em.persist(client);
address.setAddressPK(new AddressPK(new Long(120), client.getIdcliente()));
em.persist(address);
if (mainAddress) {
client.setMainAddress(address);
em.merge(client);
}
}
-IDCLIENTE主键
-NMORADAPRI可为空 外键(IDCLIENTE,NMORADAPRI)引用地址(IDCLIENTE,IDMORADA) 组合键
@Embeddable
public class AddressPK implements Serializable {
@Basic(optional = false)
@NotNull
@Column(name = "IDMORADA")
private long idmorada;
@Basic(optional = false)
@NotNull
@Column(name = "IDCLIENTE")
private long idcliente;
@Entity
@Table(name = "ADDRESSES")
public class Address implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
protected AddressPK addressPK;
@JoinColumn(name = "IDCLIENTE", referencedColumnName = "IDCLIENTE", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Client client;
@Embeddable
public class AddressPK implements Serializable {
@Basic(optional = false)
@NotNull
@Column(name = "IDMORADA")
private long idmorada;
@Basic(optional = false)
@NotNull
@Column(name = "IDCLIENTE")
private long idcliente;