Java 使用OneTONE注释创建额外列
我有一个用户对象,需要将组对象与用户对象一起加载 我已经为此编写了以下代码Java 使用OneTONE注释创建额外列,java,hibernate,jpa,Java,Hibernate,Jpa,我有一个用户对象,需要将组对象与用户对象一起加载 我已经为此编写了以下代码 @实体 @表(name=“User\u info”) 公共类UserDao{ @身份证 @GeneratedValue(策略=GenerationType.AUTO) 私有int用户id; @列(name=“first_name”) 私有字符串名; @列(name=“groupId”) 私有int-groupId; @OneToOne(级联=级联类型.ALL) @PrimaryKeyJoinColumn 私人团长; //
@实体
@表(name=“User\u info”)
公共类UserDao{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私有int用户id;
@列(name=“first_name”)
私有字符串名;
@列(name=“groupId”)
私有int-groupId;
@OneToOne(级联=级联类型.ALL)
@PrimaryKeyJoinColumn
私人团长;
//二传手和接球手
}
和GroupMaster
:
@实体
@表(name=“group\u master”)
公共类群主{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私有int-groupId;
@列(name=“groupName”)
私有字符串组名;
//二传手和接球手
}
这里的group\u master
是主表,它有groupId
和groupname
我将根据获取groupMaster
对象所需的值,在user\u info
表中给出groupId
。但这里的问题是hibernate正在创建
CREATE TABLE group\u master
(
组id整数不为空,
组名称字符变化(255),
user\u user\u id整数不为空,
约束组\u主\u pkey主键(组\u id),
约束fkjxrn8rglp972s1pqfh5tsb6cu外键(用户id)
参考用户信息(用户id)匹配简单
更新时无操作删除时无操作
)
带(OID=假);
将表组_主所有者更改为XYZ;
我不知道为什么它会创建
user\u-user\u-id
列。我对这个user\u user\u id
列没有任何用处。该关系应与groupId
关联。如何修复它。您不需要单独的groupId列或@PrimaryKeyJoinColumn注释将您的UserDao更改为:
@实体
@表(name=“User\u info”)
公共类UserDao{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私有int用户id;
@列(name=“first_name”)
私有字符串名;
@OneToOne(级联=级联类型.ALL)
私人团长;
//二传手和接球手
}
您应该在两侧定义@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
}
那么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
}
不要称你的用户为“UserDao”。刀是不同的东西。将JPA实体视为对业务领域建模的常规类。@EasterBunybugsMasher yeah命名约定缺失,我会更正它,感谢您的建议我得到
错误Null值被分配给Model.UserDao.groupId的基元类型setter的属性[class Model.UserDao.groupId];嵌套的异常是org.hibernate.PropertyAccessException:为Model.UserDao.groupId的基元类型setter的属性[class com.kcs.util.bulkmailer.Model.UserDao.groupId]分配了Null值,但这些值没有到达groupMaster