【发布时间】:2015-02-18 07:49:00
【问题描述】:
CREATE TABLE `Policy` (
`policyId` int(11) NOT NULL AUTO_INCREMENT,
`policyName` varchar(30) NOT NULL,
`roleId` int(11) NOT NULL,
PRIMARY KEY (`policyId`)
CONSTRAINT `policy_ibfk_1` FOREIGN KEY (`roleId`) REFERENCES `Role` (`roleId`) ON DELETE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `Role` (
`roleId` int(11) NOT NULL AUTO_INCREMENT,
`rolename` varchar(30) NOT NULL,
`roleDescription` varchar(100) DEFAULT NULL,
PRIMARY KEY (`roleId`),
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8;
我对描述的角色策略表和 POJO 有一个 1-Many 映射,如下所示
@Entity
@Table(name="policy")
public class AWSPolicy implements Serializable{
@Id
@GeneratedValue
@Column(name = "policyId")
private int policyId;
@Column(name = "policyName")
private String policyName;
@ManyToOne
@JoinColumn(name="roleId")
private Role role;
public AWSRole getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
public int getPolicyId() {
return policyId;
}
public void setPolicyId(int policyId) {
this.policyId = policyId;
}
public String getPolicyName() {
return policyName;
}
public void setPolicyName(String policyName) {
this.policyName = policyName;
}
}
@Entity
@Table(name="role")
public class Role implements Serializable{
@Column(name = "rolename")
private String rolename;
@Id
@GeneratedValue
@Column(name = "roleId")
private int roleId;
@Column(name = "roleDescription")
private String roleDescription;
@OneToMany(cascade=CascadeType.PERSIST, mappedBy = "role")
private Set<AWSPolicy> policies;
public Set<AWSPolicy> getPolicies() {
return policies;
}
public void setPolicies(Set<AWSPolicy> policyList) {
this.policies = policyList;
}
public int getRoleId() {
return roleId;
}
public void setRoleId(int roleId) {
this.roleId = roleId;
}
public String getRolename() {
return rolename;
}
public void setRolename(String rolename) {
this.rolename = rolename;
}
public String getRoleDescription() {
return roleDescription;
}
public void setRoleDescription(String roleDescription) {
this.roleDescription = roleDescription;
}
}
问题是当我尝试插入表时,它只插入角色表而不是策略表。有人可以帮我弄这个吗。
Role role = new Role();
Set<Policy> policyList = new HashSet<Policy>();
Policy policy = new Policy();
policy.setPolicyName("uberpolicy");
policyList.add(policy);
role.setRolename("uberrole");
role.setRoleDescription("uberrole");
role.setPolicies(policyList);
Session session = getSessionFactory().getCurrentSession();
session.save(role);
【问题讨论】:
-
可以看到hibernate在调试模式下执行的sql查询。你检查了吗?
-
启用 show_sql=true 并粘贴要执行的查询。
标签: java mysql database hibernate hibernate-mapping