[英]foreignKey or inverseForeignKey for many-to-many join table
我有一個Spring項目,該項目將JPA與Hibernate和MySQL一起使用,並且該數據庫具有三個表:Users,Role和join表User Roles。 您能否告訴我是應該在inverseJoinColumn中使用inverseForeignKey屬性還是將其保持不變(簡單地為foreignKey)?
@Entity
@Table(name = "users")
public class User
{
// Class contains some other variables and methods that are irrelevant to this question
// All annotations are from javax.persistence package
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "user_roles",
joinColumns = @JoinColumn(name = "user_id", foreignKey = @ForeignKey(name = "FK_users_user_roles_user_id")),
inverseJoinColumns = @JoinColumn(name = "role_id", foreignKey = @ForeignKey(name = "FK_roles_user_roles_role_id")))
private Set<Role> roles;
}
所有表的SQL腳本:
CREATE TABLE `users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`email` varchar(255) NOT NULL,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`points` bigint(11) NOT NULL,
`rank` varchar(255) DEFAULT NULL,
`registered_at` date DEFAULT NULL,
`avatar` varchar(255) DEFAULT NULL,
`full_name` varchar(255) DEFAULT NULL,
`info` varchar(255) DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `roles` (
`role_id` int(11) NOT NULL AUTO_INCREMENT,
`role` varchar(255) DEFAULT NULL,
PRIMARY KEY (`role_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `user_roles` (
`user_id` int(11) NOT NULL,
`role_id` int(11) NOT NULL,
PRIMARY KEY (`user_id`,`role_id`),
CONSTRAINT `FK_roles_user_roles_role_id` FOREIGN KEY (`role_id`) REFERENCES `roles` (`role_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_users_user_roles_user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
您可以簡單地使用referencedColumnName
聯接表中父表的主鍵。 您的@ManyToMany
映射可以如下所示。
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "user_roles",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName="user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName="role_id"))
private Set<Role> roles;
請參考這里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.