[img]http://caterpillar.onlyfun.net/Gossip/EJB3Gossip/images/OneToOneSharedPK-1.jpg[/img]
[code="java"]
public class TUser implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "USER_ID")
private Integer userId;
@Column(name = "NAME")
private String name;
@Column(name = "AGE")
private String age;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "tUser")
@PrimaryKeyJoinColumn(name="USER_ID" , referencedColumnName="ROOM_ID")
private TRoom tRoom;
.
.
.
}
public class TRoom implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "ROOM_ID")
private Integer roomId;
@Column(name = "ADDRESS")
private String address;
@JoinColumn(name = "ROOM_ID", referencedColumnName = "USER_ID", insertable = false, updatable = false)
@OneToOne(optional = false)
private TUser tUser;
.
.
.
[/code]
[code="java"]
TRoom room = new TRoom();
room.setAddress("3/f");
TUser user = new TUser();
user.setAge("100");
user.setName("angus");
user.setTRoom(room);
entityManager.persist(user);[/code]
[b]com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'ROOM_ID' cannot be null[/b]
环境:
EclipseLink(JPA 2.0) persistence provider
MySQL
Glassfish 3.0
配置错在哪里?
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'ROOM_ID' cannot be null
错误信息很明显是你的TRoom表的roomId没有映射主键生成方式
在下面
TRoom room = new TRoom();
room.setAddress("3/f");
中也没给roomId去赋值
解决办法1:
给roomId映射主键生成策略
解决办法2:
给roomId赋值