【发布时间】:2013-04-20 07:50:19
【问题描述】:
我的一个实体有问题。
Glassfish 访问管理有 3 个表(UserAccount、UserRole、Role)和两个实体 UserAccount 和 Role,通过“ManyToMany”相互映射。
要更改 UserAccount 的角色,我通过 UserAccount 的 setRoles() 方法应用一个新的所选角色列表。当我添加新角色时,一切正常,声明是正确的:
INSERT INTO UserRole (Role_roleName, UserAccount_email,
UserAccount_Account_accountId)
VALUES ('Client', 'email@example.com', 1)
但是当我从列表中删除一个项目时,连接表中已删除的条目也应该被删除。正如预期的那样,提交了查询,但电子邮件列设置为“null”。
DELETE FROM UserRole WHERE ((Role_roleName = 'Administrator')
AND ((UserAccount_Account_accountId = 1) AND (UserAccount_email = null)))
有人知道为什么此列设置为空吗?当我在合并到数据库之后和之前使用 userAccount.getEmail() 输出电子邮件时,它会返回电子邮件地址...
非常感谢任何帮助。
谢谢,曼努埃尔
设置: 容器:Glassfish 3.1.2 JPA:Eclipse 持久性服务 - 2.3.2.v20111125-r10461
UserAccount 实体:
@Entity
@Table(name="UserAccount")
@PrimaryKeyJoinColumn(name = "Account_accountId")
public class UserAccount extends Account implements Serializable {
private static final long serialVersionUID = 1L;
private String password;
//bi-directional one-to-one association to Account
@OneToOne
@JoinColumn(name="Account_accountId")
private Account account;
@Column(name="email")
private String email;
//bi-directional many-to-many association to Role
@ManyToMany
@JoinTable(
name="UserRole"
,
joinColumns={
@JoinColumn(name="UserAccount_email", referencedColumnName="email"),
@JoinColumn(name="UserAccount_Account_accountId", referencedColumnName="Account_accountId")
}
, inverseJoinColumns={
@JoinColumn(name="Role_roleName")
}
)
private List<Role> roles;
//getter and setters
账户实体
@Entity
@Table(name="Account")
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Account implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int accountId;
private boolean active;
private String address;
private String dtype;
private String firstname;
private String handy;
private String name;
private String tel;
//getter and setters
角色实体:
@Entity
@Table(name="Role")
public class Role implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private String roleName;
@Lob
private String roleDescription;
//bi-directional many-to-many association to UserAccount
@ManyToMany(mappedBy="roles")
private List<UserAccount> userAccounts;
//getter and setters
【问题讨论】:
-
你是怎么解决这个问题的?
-
不幸的是我无法解决它......
-
一旦我找到解决方案我会告诉你的。
标签: jakarta-ee jpa glassfish eclipselink