1 package ejava.examples.orm.onetomany.annotated; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 6 import javax.persistence.*; 7 8 /** 9 * This class implements a parent in a OneToMany, uni-directional relationship 10 * test case. We are looking to see where the foreign key gets placed; in 11 * a link/join table or the child side of the relationship. The child class 12 * knows nothing of this relationship.<p/> 13 * 14 * This is the schema when nothing besides @OneToMany is defined<p/> 15 * <pre> 16 @OneToMany 17 public Collection<OneManyChild> getChildren() { 18 return children; 19 } 20 </pre><p/> 21 * <pre> 22 create table ORMO2M_CHILD ( 23 CHILDID bigint generated by default as identity (start with 1), 24 name varchar(255), 25 primary key (CHILDID) 26 ); 27 28 create table ORMO2M_PARENT ( 29 PARENTID bigint generated by default as identity (start with 1), 30 name varchar(255), 31 primary key (PARENTID) 32 ); 33 34 create table ORMO2M_PARENT_ORMO2M_CHILD ( 35 ORMO2M_PARENT_PARENTID bigint not null, 36 children_CHILDID bigint not null, 37 unique (children_CHILDID) 38 ); 39 alter table ORMO2M_PARENT_ORMO2M_CHILD 40 add constraint FK9732C673B120B8B4 41 foreign key (children_CHILDID) 42 references ORMO2M_CHILD; 43 44 alter table ORMO2M_PARENT_ORMO2M_CHILD 45 add constraint FK9732C673C25EC1A0 46 foreign key (ORMO2M_PARENT_PARENTID) 47 references ORMO2M_PARENT; 48 49 </pre><p/> 50 * 51 * Adding @JoinColumn(name="PARENT_ID") to the parent side... 52 * <pre> 53 @OneToMany 54 @JoinColumn(name="PARENT_ID") 55 public Collection<OneManyChild> getChildren() { 56 return children; 57 } 58 </pre><p/> 59 * <pre> 60 create table ORMO2M_CHILD ( 61 CHILDID bigint generated by default as identity (start with 1), 62 name varchar(255), 63 PARENT_ID bigint, 64 primary key (CHILDID) 65 ); 66 67 create table ORMO2M_PARENT ( 68 PARENTID bigint generated by default as identity (start with 1), 69 name varchar(255), 70 primary key (PARENTID) 71 ); 72 alter table ORMO2M_CHILD 73 add constraint FK257187DDF37CA975 74 foreign key (PARENT_ID) 75 references ORMO2M_PARENT; 76 </pre><p/> 77 * 78 * Adding @JoinTable/@JoinColumn(name="PARENT_ID") to the parent side... 79 * <pre> 80 @OneToMany 81 @JoinTable( 82 joinColumns=@JoinColumn(name="PARENT_ID")) 83 public Collection<OneManyChild> getChildren() { 84 return children; 85 } 86 </pre><p/> 87 * <pre> 88 create table ORMO2M_CHILD ( 89 CHILDID bigint generated by default as identity (start with 1), 90 name varchar(255), 91 primary key (CHILDID) 92 ); 93 94 create table ORMO2M_PARENT ( 95 PARENTID bigint generated by default as identity (start with 1), 96 name varchar(255), 97 primary key (PARENTID) 98 ); 99 100 create table ORMO2M_PARENT_ORMO2M_CHILD ( 101 PARENT_ID bigint not null, 102 children_CHILDID bigint not null, 103 unique (children_CHILDID) 104 ); 105 alter table ORMO2M_PARENT_ORMO2M_CHILD 106 add constraint FK9732C673B120B8B4 107 foreign key (children_CHILDID) 108 references ORMO2M_CHILD; 109 110 alter table ORMO2M_PARENT_ORMO2M_CHILD 111 add constraint FK9732C673F37CA975 112 foreign key (PARENT_ID) 113 references ORMO2M_PARENT; 114 </pre><p/> 115 * 116 * 117 * @author jcstaff 118 * 119 */ 120 @Entity(name="O2MOwningParent") @Table(name="ORMO2M_PARENT") 121 public class OneManyOwningParent { 122 @Id @GeneratedValue @Column(name="PARENTID") 123 private long id; 124 125 private String name; 126 127 @OneToMany 128 @JoinColumn(name="PARENT_ID") 129 //@JoinTable( 130 // joinColumns=@JoinColumn(name="PARENT_ID")) 131 private Collection<OneManyChild> children = new ArrayList<OneManyChild>(); 132 133 public OneManyOwningParent() {} 134 public OneManyOwningParent(long id) { this.id = id; } 135 public OneManyOwningParent(String name) { this.name = name; } 136 137 public long getId() { return id; } 138 139 public String getName() { return name; } 140 public void setName(String name) { 141 this.name = name; 142 } 143 144 public Collection<OneManyChild> getChildren() { return children; } 145 public void setChildren(Collection<OneManyChild> children) { 146 this.children = children; 147 } 148 149 public String toString() { 150 StringBuilder text = new StringBuilder(); 151 text.append("id=" + id); 152 text.append(", name=" + name); 153 text.append(", children=(" + children.size() + ")" + children); 154 return text.toString(); 155 } 156 }