Маленькая статья по 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 Set events = 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 Set events;
}
@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();
пожалуй лучший пример из всех что я видел раньше
ОтветитьУдалить