Маленькая статья по Hibernate Bidirectional Association Annotation.
Я здесь кратко описал все Bidirectional Association которые есть у Hibernate посредством Annotation.
1. Hibernate: Annotation one-to-many/many-to-one(foreign-key)
-=Relationship=-
person(one) <-> address(many)
-=DB Schema=-
-=Relationship=-
person(one) <-> address(many)
-=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),
personId bigint not null,
primary key (id)
)
alter table EVENTS
add constraint FK7A9AD519B59AA19
foreign key (personId)
references Persons(personId)
-=Annotation=-
public class Person {
@Id
@GeneratedValue()
@Column(name = "personId")
private Long id;
@OneToMany(cascade =CascadeType.ALL,fetch = FetchType.EAGER,
mappedBy = "person1")
private List events = new ArrayList();
}
public class Event {
@Id @GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment")
private Long id;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "personId",referencedColumnName = "personId",nullable = false)
private Person person1;
}
-=Доступ к объекту=-
person1.getEvents().toString(); event.getPerson1().toString();
2. Hibernate: Annotation one-to-many/many-to-one(join table)
-=Relationship=-
Person(one) <-> Event(many)
-=DB Schema=-
-=Relationship=-
Person(one) <-> Event(many)
-=DB Schema=-
create table Persons (
personId bigint generated by default as identity,
fName varchar(255),
sName varchar(255),
primary key (personId)
)
create table EVENTS (
eventId bigint not null,
EVENT_DATE timestamp,
title varchar(255),
primary key (eventId)
)
create table PersonEvent (
personId bigint,
eventId bigint not null,
primary key (eventId)
)
alter table PersonEvent
add constraint FK489E5C25B59AA19
foreign key (personId)
references Persons(personId)
alter table PersonEvent
add constraint FK489E5C25418989BB
foreign key (eventId)
references EVENTS(eventId)
-=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 List events = new ArrayList();
}
@Entity
@Table(name = "EVENTS")
public class Event {
@Id @GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment")
@Column(name = "eventId")
private Long id;
@ManyToOne(cascade = CascadeType.ALL)
@JoinTable(name = "PersonEvent"
,joinColumns = @JoinColumn(name = "eventId")
,inverseJoinColumns = @JoinColumn(name = "personId"))
private Person person1;
}
-=Доступ к объекту=-
person1.getEvents().toString(); event.getPerson1().toString();
3. Hibernate: Annotation one-to-one(primary-key)
-=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 (
eventId bigint not null,
EVENT_DATE timestamp,
title varchar(255),
primary key (eventId)
)
-=Annotation=-
@Entity
@Table(name="Persons")
public class Person {
@Id
@GeneratedValue()
@Column(name = "personId")
private Long id;
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private Event events;
}
@Entity
@Table(name = "EVENTS")
public class Event {
@Id @GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment")
@Column(name = "eventId")
private Long id;
@OneToOne(cascade = CascadeType.ALL,mappedBy = "events")
private Person person1;
}
-=Доступ к объекту=-
person1.getEvents().toString(); event.getPerson1().toString();
4. Hibernate: Annotation one-to-one(foreign-key)
-=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),
eventId bigint,
primary key (personId)
)
create table EVENTS (
eventId bigint not null,
EVENT_DATE timestamp,
title varchar(255),
primary key (eventId)
)
alter table Persons
add constraint FK3AC8679E418989BB
foreign key (eventId)
references EVENTS(eventId)
-=Annotation=-
@Entity
@Table(name="Persons")
public class Person {
@Id
@GeneratedValue()
@Column(name = "personId")
private Long id;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name= "eventId",referencedColumnName = "eventId")
private Event events;
}
@Entity
@Table(name = "EVENTS")
public class Event {
@Id @GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment")
@Column(name = "eventId")
private Long id;
@OneToOne(cascade = CascadeType.ALL,mappedBy = "events")
private Person person1;
}
-=Доступ к объекту=-
person1.getEvents().toString(); event.getPerson1().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 (
eventId bigint not null,
EVENT_DATE timestamp,
title varchar(255),
primary key (eventId)
)
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(eventId)
-=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",referencedColumnName = "personId")
,inverseJoinColumns = @JoinColumn(name = "eventId",referencedColumnName = "eventId"))
private Event events;
}
@Entity
@Table(name = "EVENTS")
public class Event {
@Id @GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment")
@Column(name = "eventId")
private Long id;
@OneToOne(cascade = CascadeType.ALL,mappedBy = "events")
private Person person1;
}
-=Доступ к объекту=-
person1.getEvents().toString(); event.getPerson1().toString();
6. Hibernate: Annotation many-to-many (join table)
-=Relationship=-
Person(many) <-> Event(many)
-=DB Schema=-
-=Relationship=-
Person(many) <-> Event(many)
-=DB Schema=-
create table Persons (
personId bigint generated by default as identity,
fName varchar(255),
sName varchar(255),
primary key (personId)
)
create table EVENTS (
eventId bigint not null,
EVENT_DATE timestamp,
title varchar(255),
primary key (eventId)
)
create table PersonEvent (
personId bigint not null,
eventId bigint not null
)
alter table PersonEvent
add constraint FK489E5C25B59AA19
foreign key (personId)
references Persons(personId)
alter table PersonEvent
add constraint FK489E5C25418989BB
foreign key (eventId)
references EVENTS(eventId)
-=Annotation=-
@Entity
@Table(name="Persons")
public class Person {
@Id
@GeneratedValue()
@Column(name = "personId")
private Long id;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "PersonEvent"
,joinColumns = @JoinColumn(name = "personId")
,inverseJoinColumns = @JoinColumn(name = "eventId"))
private List events = new ArrayList();
}
@Entity
@Table(name = "EVENTS")
public class Event {
@Id @GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment")
@Column(name = "eventId")
private Long id;
@ManyToMany(cascade = CascadeType.ALL,mappedBy = "events")
private List person1;
}
-=Доступ к объекту=-
person1.getEvents().toString(); event.getPerson1().toString();