Маленькая статья по Hibernate Unidirectional Association Annotation.
Я здесь хочу кратко описать все Unidirectional Association которые есть у Hibernate посредством Annotation.
1. Hibernate: Annotation one-to-many (foreign-key)
-=Relationship=-
Person(one) -> Event(many)
-=DB Schema=-
-=Relationship=-
Person(one) -> Event(many)
-=DB Schema=-
create table Persons ( id bigint generated by default as identity, fName varchar(255), sName varchar(255), primary key (id) ) create table EVENTS ( id bigint not null, EVENT_DATE timestamp, title varchar(255), events_ID bigint, primary key (id) ) alter table EVENTS add constraint FK7A9AD519F2DCD0EA foreign key (events_ID) references Persons(id)
-=Annotation=-
@Entity @Table(name = "EVENTS") public class Event { @Id @GeneratedValue(generator="increment") @GenericGenerator(name="increment", strategy = "increment") private Long id; } @Entity @Table(name="Persons") public class Person { @Id @GeneratedValue() private Long id; @OneToMany(cascade = CascadeType.ALL) @JoinColumn(name = "events_ID") private Setevents = new HashSet(); }
-=Доступ к объекту=-
person1.getEvents().toString();
2. Annotation one-to-many(join table)
-=Relationship=-
Person(one) -> Event(many)
-=DB Schema=-
-=Relationship=-
Person(one) -> Event(many)
-=DB Schema=-
create table EVENTS ( id bigint not null, EVENT_DATE timestamp, title varchar(255), primary key (id) ) create table PersonEvent ( personId bigint not null, eventId bigint not null, primary key (personId, eventId), unique (eventId) ) create table Persons ( personId bigint generated by default as identity, fName varchar(255), sName varchar(255), primary key (personId) ) alter table PersonEvent add constraint FK489E5C25B59AA19 foreign key (personId) references Persons(personId) alter table PersonEvent add constraint FK489E5C25418989BB foreign key (eventId) references EVENTS(id)
-=Annotation=-
@Entity @Table(name = "Persons") public class Person { @Id @GeneratedValue() @Column(name = "personId") private Long id; @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER) @JoinTable(name = "PersonEvent" ,joinColumns = @JoinColumn(name = "personId") ,inverseJoinColumns = @JoinColumn(name = "eventId")) private Setevents; } @Entity @Table(name = "EVENTS") public class Event { @Id @GeneratedValue(generator="increment") @GenericGenerator(name="increment", strategy = "increment") private Long id; }
-=Доступ к объекту=-
person1.getEvents().toString();
3. Annotation one-to-one(foreign-key)
-=Relationship=-
Person(one) -> Event(one)
-=DB Schema=-
-=Relationship=-
Person(one) -> Event(one)
-=DB Schema=-
create table EVENTS ( id bigint not null, EVENT_DATE timestamp, title varchar(255), primary key (id) ) create table Persons ( personId bigint generated by default as identity, fName varchar(255), sName varchar(255), id bigint, primary key (personId) ) alter table Persons add constraint FK3AC8679E939555A1 foreign key (id) references EVENTS(id)
-=Annotation=-
@Entity @Table(name = "Persons") public class Person { @Id @GeneratedValue() @Column(name = "personId") private Long id; @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "id") private Event events; } @Entity @Table(name = "EVENTS") public class Event { @Id @GeneratedValue(generator="increment") @GenericGenerator(name="increment", strategy = "increment") private Long id; }
-=Доступ к объекту=-
person1.getEvents().toString();
4. Annotation one-to-one(primary-key)
-=Relationship=-
Person(one) -> Event(one)
-=DB Schema=-
-=Relationship=-
Person(one) -> Event(one)
-=DB Schema=-
create table EVENTS ( id bigint not null, EVENT_DATE timestamp, title varchar(255), primary key (id) ) create table Persons ( personId bigint generated by default as identity, fName varchar(255), sName varchar(255), primary key (personId) )
-=Annotation=-
@Entity @Table(name = "Persons") public class Person { @Id @GeneratedValue() @Column(name = "personId") private Long id; @OneToOne(cascade = CascadeType.ALL) @PrimaryKeyJoinColumn(name = "personId",referencedColumnName = "eventId") private Event events; } @Entity @Table(name = "EVENTS") @ToString @EqualsAndHashCode public class Event { @Id @GeneratedValue(generator="increment") @GenericGenerator(name="increment", strategy = "increment") private Long id; }
-=Доступ к объекту=-
person1.getEvents().toString();
5. Annotation one-to-one(join table)
-=Relationship=-
Person(one) -> Event(one)
-=DB Schema=-
-=Relationship=-
Person(one) -> Event(one)
-=DB Schema=-
create table Persons ( personId bigint generated by default as identity, fName varchar(255), sName varchar(255), primary key (personId) ) create table EVENTS ( id bigint not null, EVENT_DATE timestamp, title varchar(255), primary key (id) ) create table PersonEvent ( eventId bigint, personId bigint not null, primary key (personId) ) alter table PersonEvent add constraint FK489E5C25B59AA19 foreign key (personId) references Persons(personId) alter table PersonEvent add constraint FK489E5C25418989BB foreign key (eventId) references EVENTS(id)
-=Annotation=-
@Entity @Table(name = "Persons") public class Person { @Id @GeneratedValue() @Column(name = "personId") private Long id; @OneToOne(cascade = CascadeType.ALL) @JoinTable(name="PersonEvent" ,joinColumns = @JoinColumn(name = "personId") ,inverseJoinColumns = @JoinColumn(name = "eventId")) private Event events; } @Entity @Table(name = "EVENTS") public class Event { @Id @GeneratedValue(generator="increment") @GenericGenerator(name="increment", strategy = "increment") private Long id; }
-=Доступ к объекту=-
person1.getEvents().toString();
6. Hibernate: Annotation many-to-one(foreign-key)
-=Relationship=-
Person(many) -> Event(one)
-=DB Schema=-
-=Relationship=-
Person(many) -> Event(one)
-=DB Schema=-
create table EVENTS ( id bigint not null, EVENT_DATE timestamp, title varchar(255), primary key (id) ) create table Persons ( personId bigint generated by default as identity, fName varchar(255), sName varchar(255), eventId bigint, primary key (personId) ) alter table Persons add constraint FK3AC8679E418989BB foreign key (eventId) references EVENTS(id)
-=Annotation=-
@Entity @Table(name = "Persons") public class Person { @Id @GeneratedValue() @Column(name = "personId") private Long id; @ManyToOne(cascade = CascadeType.ALL) @JoinColumn(name = "eventId" ,referencedColumnName = "id") private Event events; } @Entity @Table(name = "EVENTS") public class Event { @Id @GeneratedValue(generator="increment") @GenericGenerator(name="increment", strategy = "increment") private Long id; }
-=Доступ к объекту=-
person1.getEvents().toString();
7. Hibernate: Annotation many-to-one (join table)
-=Relationship=-
Person(many) -> Event(one)
-=DB Schema=-
-=Relationship=-
Person(many) -> Event(one)
-=DB Schema=-
create table Persons ( personId bigint generated by default as identity, fName varchar(255), sName varchar(255), primary key (personId) ) create table EVENTS ( id bigint not null, EVENT_DATE timestamp, title varchar(255), primary key (id) ) create table PersonEvent ( enentId bigint, personId bigint not null, primary key (personId) ) alter table PersonEvent add constraint FK489E5C25B59AA19 foreign key (personId) references Persons(personId) alter table PersonEvent add constraint FK489E5C2533E2C4C3 foreign key (enentId) references EVENTS(id)
-=Annotation=-
@Entity @Table(name = "Persons") public class Person { @Id @GeneratedValue() @Column(name = "personId") private Long id; @ManyToOne(cascade = CascadeType.ALL) @JoinTable(name = "PersonEvent" ,joinColumns = @JoinColumn(name = "personId",referencedColumnName = "personId") ,inverseJoinColumns = @JoinColumn(name = "enentId",referencedColumnName = "id")) private Event events; } @Entity @Table(name = "EVENTS") public class Event { @Id @GeneratedValue(generator="increment") @GenericGenerator(name="increment", strategy = "increment") private Long id; }
-=Доступ к объекту=-
person1.getEvents().toString();
пожалуй лучший пример из всех что я видел раньше
ОтветитьУдалить