Annotation method
Table Structure:
'CREATE TABLE `address` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) DEFAULT NULL,
`personID` int(11) NOT NULL,
`personName` varchar(45) NOT NULL,
PRIMARY KEY (`id`),
KEY `FK_cuouomn7m2bjnuywew2n5im4w` (`personID`,`personName`),
CONSTRAINT `FK_cuouomn7m2bjnuywew2n5im4w` FOREIGN KEY (`personID`, `personName`) REFERENCES `person` (`id`, `name`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8'
'CREATE TABLE `person` (
`id` int(11) NOT NULL,
`name` varchar(45) NOT NULL,
`age` int(11) NOT NULL,
PRIMARY KEY (`id`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8'
PersonID class
package hibernate.entities; import java.io.Serializable; public class PersonID implements Serializable { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Person class
package hibernate.entities; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.IdClass; import javax.persistence.JoinColumn; import javax.persistence.OneToOne; @Entity @IdClass(PersonID.class) public class Person { private int id; private String name; private int age; @Id public int getId() { return id; } public void setId(int id) { this.id = id; } @Id public String getName() { return name; } public void setName(String name) { this.name = name; } @Column public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
Address class
package hibernate.entities; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinColumns; import javax.persistence.OneToOne; @Entity public class Address { private int id; private String name; private Person person; @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } @Column public String getName() { return name; } public void setName(String name) { this.name = name; } @OneToOne @JoinColumns( { @JoinColumn(name="personID", referencedColumnName="id"), @JoinColumn(name="personName", referencedColumnName="name") } ) public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } }