正在创建带有OneToOne注释的额外列



我有一个用户对象,我需要将组对象和用户对象一起加载。

我已经为此编写了以下代码。

@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是主表,并且它具有groupIdgroupname

我将根据获得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
}

最新更新