Java JPA列错误
我试图模拟一种一对一的关系。当我尝试添加nullable=false时,Java JPA列错误,java,jakarta-ee,jpa,Java,Jakarta Ee,Jpa,我试图模拟一种一对一的关系。当我尝试添加nullable=false时, 在join列属性中,我得到一个SQLIntegrityContrainViolationException,表示地址的ID为null。我希望这样,因为我在id中使用的自动生成值是在提交时生成的。(我说得对吗?) 但是,当我在地址构造函数中进行修改时,在那里设置一个id,然后尝试持久化。。我也有同样的例外。我不明白为什么 但是,如果我删除nullable=false,我可以正常地执行它。请解释一下我错在哪里 下面是我的实现。
在join列属性中,我得到一个SQLIntegrityContrainViolationException,表示地址的ID为null。我希望这样,因为我在id中使用的自动生成值是在提交时生成的。(我说得对吗?) 但是,当我在地址构造函数中进行修改时,在那里设置一个id,然后尝试持久化。。我也有同样的例外。我不明白为什么 但是,如果我删除nullable=false,我可以正常地执行它。请解释一下我错在哪里 下面是我的实现。。为了简单起见,省略了getter和setter
@Entity
public class CustomerEX implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@OneToOne(fetch = FetchType.LAZY,cascade = CascadeType.PERSIST)
@JoinColumn(name="address_fk")
private AddressEx address;
public void setAddress(AddressEx address) {
this.address = address;
this.address.setCustomer(this);
}
---
----
}
and
@Entity
public class AddressEx implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long id;
private String city;
private String country;
@OneToOne
private CustomerEX customer;
}
我的主要功能是
public class CustomerTest {
public static void main(String[] args) {
AddressEx addr = new AddressEx();
addr.setCity("Bangalore");
addr.setCountry("India");
System.out.println(addr.getId()+ " is the id of this object");
CustomerEX cust = new CustomerEX();
cust.setName("ravi");
cust.setAddress(addr);
EntityManagerFactory emf = Persistence.createEntityManagerFactory("PersistenceAppPU");
EntityManager em = emf.createEntityManager();
EntityTransaction etx = em.getTransaction();
etx.begin();
em.persist(cust);
etx.commit();
}
}
我哪里出错了?您应该将持久化操作从客户级联到地址。 您正在保存客户,但该地址还没有Id,因为它是生成的请尝试在em.persist()之后添加em.flush()。