JPA 一對一 問題

[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赋值