11.27.2012

Маленькая статья по 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=-
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=-
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=-
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=-
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=-
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=-
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();

Комментариев нет:

Отправить комментарий