11.26.2012

Маленькая статья по Hibernate Unidirectional Association Annotation.

Я здесь хочу кратко описать все Unidirectional Association которые есть у Hibernate посредством Annotation.

1. Hibernate: Annotation one-to-many (foreign-key)

-=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=-
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=-
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=-
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=-
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=-
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=-
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();

1 комментарий: