我想做一個使用JPA的Jaas登錄模塊來存儲我的AuthUser和AuthUserRole。我將在這個問題上關注JPA方面。EclipseLink:是否可以將作爲外鍵的@EmbeddedId屬性的@OneToMany關係添加到類上?
以下是我將在數據庫(不是所有合法的SQL代碼,但希望全面)做:
TABLE AuthUser(INT uid, VARCHAR password)
PRIMARY KEY (uid)
TABLE AuthUserRole(INT uid, INT role)
PRIMARY KEY (uid , role)
FOREIGN KEY (uid) REFERENCE AuthUser.uid
這對我來說很有意義,一個角色只能使用一次,分配給用戶。
這是我試圖用Java做的,而不是顯示爲AuthUser用戶名和電子郵件:
@Entity
public class AuthUser {
@Id
private int uid;
private String password;
@OneToMany
private Set<AuthUserRole> roles;
}
@Entity
public class AuthUserRole {
@Embeddedid
private AuthUserRolePK authUserRolePK;
}
@Embeddable
public class AuthUserRolePK {
public int uid;
public int role;
}
的EclipseLink不映射就好了,這意味着它的工作原理,但不是我想要的方式。它創建了第三個名爲* authuser_authuserrole *的表,其中包含(AuthUser_uid,uid,role)列。無需提及AuthUser_uid和uid是相同的。
瑣碎的答案是:
@Entity
public class AuthUser {
@Id
private int uid;
private String password;
@OneToMany
@JoinColumn(name="authUserRolePK.uid", referencedColumnName="uid")
private Set<AuthUserRole> roles;
}
但EclipseLink的cryes,當使用@EmbeddedId,所有主鍵列必須被提及。
問:我該如何讓Eclipselink映射我的實體,比如我提到的數據庫模式?我應該使用@IdClass嗎?我可以看到數據庫的結果 - >實體映射,但這太容易了:)
謝謝你的回答!
這不是關於嵌入式編程。 stackoverflow.com/tags/embedded/info。 Retagged –