我有一个用户对象,我需要将组对象和用户对象一起加载。
我已经为此编写了以下代码。
@Entity
@Table(name = "User_info")
public class UserDao {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int userId;
@Column(name="first_name")
private String firstName;
@Column(name="groupId")
private int groupId;
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private GroupMaster groupMaster;
//setters and getters
}
和GroupMaster
:
@Entity
@Table(name = "group_master")
public class GroupMaster {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int groupId;
@Column(name="groupName")
private String groupName;
//Setters and getters
}
这里,group_master
是主表,并且它具有groupId
和groupname
。
我将根据获得groupMaster
对象所需的值,在user_info
表中给出groupId
。但这里的问题是hibernate正在创建
CREATE TABLE group_master
(
group_id integer NOT NULL,
group_name character varying(255),
user_user_id integer NOT NULL,
CONSTRAINT group_master_pkey PRIMARY KEY (group_id ),
CONSTRAINT fkjxrn8rglp972s1pqfh5tsb6cu FOREIGN KEY (user_user_id)
REFERENCES user_info (user_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH ( OIDS=FALSE );
ALTER TABLE group_master OWNER TO XYZ;
我不知道它为什么创建user_user_id
列。我对这个user_user_id
专栏没有任何用处。关系应为groupId
。我该怎么修?
您不需要单独的groupId列或@PrimaryKeyJoinColumn Annotation
将您的UserDao更改为:
@Entity
@Table(name = "User_info")
public class UserDao {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int userId;
@Column(name="first_name")
private String firstName;
@OneToOne(cascade = CascadeType.ALL)
private GroupMaster groupMaster;
//setters and getters
}
您应该在两侧定义@OneToOne关系,因此您也需要将@OneToOne注释添加到GroupMaster中,以便以正确的方式进行操作:
@Entity
@Table(name = "User_info")
public class UserDao {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int userId;
@Column(name="first_name")
private String firstName;
@OneToOne(mappedBy = "user")
GroupMaster group;
//setters and getters
}
那么群主实体应该是这样的:
@Entity
@Table(name = "group_master")
public class GroupMaster {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int groupId;
@Column(name="groupName")
private String groupName;
@OneToOne
@PrimaryKeyJoinColumn
UserDao user;
//Setters and getters
}