[hibernate-issues] [Hibernate-JIRA] Resolved: (HHH-3410) @OneToMany forces unique key in @JoinTable when inverseJoinColumns = @JoinColumn(unique=false)
Gail Badner (JIRA)
noreply at atlassian.com
Wed Nov 2 13:46:23 EDT 2011
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-3410?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Gail Badner resolved HHH-3410.
------------------------------
Resolution: Rejected
Assignee: Gail Badner
Not a bug.
> @OneToMany forces unique key in @JoinTable when inverseJoinColumns = @JoinColumn(unique=false)
> ----------------------------------------------------------------------------------------------
>
> Key: HHH-3410
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3410
> Project: Hibernate Core
> Issue Type: Bug
> Affects Versions: 3.2.6
> Environment: MySQL 5.0.51b, Hibernate Core 3.2.6 GA, Hibernate Annotations 3.3.1 GA
> Reporter: Kamil Morong
> Assignee: Gail Badner
>
> Hi,
> I need to have this class composition with one to many relation:
> @Entity
> @Table(name="USER")
> public class User implements java.io.Serializable {
> private Long id;
> private String username;
> private String password;
> private Set<Role> roles = new LinkedHashSet<Role>();
> public User() {
> }
> @Id
> @GeneratedValue(strategy = GenerationType.AUTO)
> @Column(name = "USER_ID")
> public Long getId() {
> return id;
> }
> public void setId(Long id) {
> this.id = id;
> }
> @Column(name="USERNAME", nullable=false, unique=true)
> public String getUsername() {
> return username;
> }
> public void setUsername(String userName) {
> this.username = userName;
> }
> @Column(name="PASSWORD", nullable=false)
> public String getPassword() {
> return password;
> }
> public void setPassword(String password) {
> this.password = password;
> }
> @CollectionOfElements
> @OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE})
> @JoinTable(name = "USER_ROLE",
> joinColumns = @JoinColumn(name = "USER_ID", unique=false),
> inverseJoinColumns = @JoinColumn(name = "ROLE_ID", unique=false))
> @Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
> @LazyCollection(LazyCollectionOption.FALSE)
> public Set<Role> getRoles() {
> return roles;
> }
> public void setRoles(Set<Role> roles) {
> this.roles = roles;
> }
> }
> @Entity
> @Table(name="ROLE")
> public class Role implements java.io.Serializable {
> private Long id;
> private String name;
> public Role() {
> }
> @Id
> @GeneratedValue(strategy = GenerationType.AUTO)
> @Column(name = "ROLE_ID")
> public Long getId() {
> return id;
> }
> public void setId(Long id) {
> this.id = id;
> }
> @Column(name="NAME", nullable=false, unique=true)
> public String getName() {
> return name;
> }
> public void setName(String name) {
> this.name = name;
> }
> }
> This will create db tables like SQL script
> CREATE TABLE `user` (
> `USER_ID` BIGINT(20) NOT NULL AUTO_INCREMENT,
> `PASSWORD` VARCHAR(255) NOT NULL DEFAULT '',
> `USERNAME` VARCHAR(255) NOT NULL DEFAULT '',
> PRIMARY KEY (`USER_ID`),
> UNIQUE KEY `USERNAME` (`USERNAME`)
> );
> CREATE TABLE `role` (
> `ROLE_ID` BIGINT(20) NOT NULL AUTO_INCREMENT,
> `NAME` VARCHAR(255) NOT NULL DEFAULT '',
> PRIMARY KEY (`ROLE_ID`),
> UNIQUE KEY `NAME` (`NAME`)
> );
> CREATE TABLE `user_role` (
> `USER_ID` BIGINT(20) NOT NULL,
> `ROLE_ID` BIGINT(20) NOT NULL,
> PRIMARY KEY (`USER_ID`, `ROLE_ID`),
> UNIQUE KEY `ROLE_ID` (`ROLE_ID`),
> KEY `FKBC16F46A1174FFAB` (`ROLE_ID`),
> KEY `FKBC16F46AB69FC38B` (`USER_ID`),
> CONSTRAINT `FKBC16F46AB69FC38B` FOREIGN KEY (`USER_ID`) REFERENCES `user` (`USER_ID`),
> CONSTRAINT `FKBC16F46A1174FFAB` FOREIGN KEY (`ROLE_ID`) REFERENCES `role` (`ROLE_ID`)
> );
> Tables USER and ROLE are right, but the join table USER_ROLE still have defined UNIQUE KEY `ROLE_ID` (`ROLE_ID`).
> This causes there cannot be one user with many roles.
> There must be some bug while generating database scheme. I am not able to remove unique key.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list