Поиск…


параметры

аннотирование подробности
@OneToOne Определяет отношение «один к одному» с соответствующим объектом.
@OneToMany Указывает один объект, который сопоставляется со многими объектами.
@ManyToOne Задает набор объектов, которые отображаются на один объект.
@Entity Задает объект, который сопоставляется с таблицей базы данных.
@Table Задает таблицу базы данных, к которой относится этот объект.
@JoinColumn Указывает, в каком столбце хранится ключ foregin.
@JoinTable Задает промежуточную таблицу, в которой хранятся внешние ключи.

Двунаправленные от многих до многих, используя пользовательский интерфейс.

@Entity
@Table(name="FOO")
public class Foo {
    private UUID fooId;
    
    @OneToMany(mappedBy = "bar")
    private List<FooBar> bars;
}

@Entity
@Table(name="BAR")
public class Bar {
    private UUID barId;
    
    @OneToMany(mappedBy = "foo")
    private List<FooBar> foos;
}

@Entity
@Table(name="FOO_BAR")
public class FooBar {
    private UUID fooBarId;

    @ManyToOne
    @JoinColumn(name = "fooId")
    private Foo foo;

    @ManyToOne
    @JoinColumn(name = "barId")
    private Bar bar;

    //You can store other objects/fields on this table here.
}

Определяет двустороннюю связь между многими объектами Foo для многих объектов Bar используя промежуточную таблицу соединений, которую управляет пользователь.

Объекты Foo хранятся в виде строк в таблице под названием FOO . Объекты Bar хранятся в виде строк в таблице под названием BAR . Отношения между объектами Foo и Bar хранятся в таблице FOO_BAR . В приложении есть объект FooBar .

Обычно используется, когда вы хотите хранить дополнительную информацию об объекте объединения, например дату создания отношения.

введите описание изображения здесь

Двунаправленное много для многих, используя таблицу управления соединением Hibernate

@Entity
@Table(name="FOO")
public class Foo {
    private UUID fooId;
    
    @OneToMany
    @JoinTable(name="FOO_BAR",
        joinColumns = @JoinColumn(name="fooId"),
        inverseJoinColumns = @JoinColumn(name="barId"))
    private List<Bar> bars;
}

@Entity
@Table(name="BAR")
public class Bar {
    private UUID barId;
    
    @OneToMany
    @JoinTable(name="FOO_BAR",
        joinColumns = @JoinColumn(name="barId"),
        inverseJoinColumns = @JoinColumn(name="fooId"))
    private List<Foo> foos;
}

Задает связь между многими объектами Foo для многих объектов Bar используя промежуточную таблицу соединений, которую управляет Hibernate.

Объекты Foo хранятся в виде строк в таблице под названием FOO . Объекты Bar хранятся в виде строк в таблице под названием BAR . Отношения между объектами Foo и Bar хранятся в таблице FOO_BAR . Однако это означает, что объект FooBar не FooBar частью приложения.

введите описание изображения здесь

Двунаправленные отношения «один ко многим» с использованием сопоставления внешних ключей

@Entity
@Table(name="FOO") 
public class Foo {
    private UUID fooId;
    
    @OneToMany(mappedBy = "bar")
    private List<Bar> bars;
}

@Entity
@Table(name="BAR")
public class Bar {
    private UUID barId;
    
    @ManyToOne
    @JoinColumn(name = "fooId")
    private Foo foo;
}

Задает двухстороннюю связь между одним объектом Foo и многими объектами Bar с использованием внешнего ключа.

Объекты Foo хранятся в виде строк в таблице под названием FOO . Объекты Bar хранятся в виде строк в таблице под названием BAR . Внешний ключ хранится в таблице BAR в столбце fooId .

введите описание изображения здесь

Двунаправленные отношения «один к одному», управляемые Foo.class

@Entity
@Table(name="FOO")    
public class Foo {
    private UUID fooId;
    
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "barId")
    private Bar bar;
}

@Entity
@Table(name="BAR")
public class Bar {
    private UUID barId;
    
    @OneToOne(mappedBy = "bar")
    private Foo foo;
}

Указывает двустороннюю связь между одним объектом Foo и одним объектом Bar с использованием внешнего ключа.

Объекты Foo хранятся в виде строк в таблице под названием FOO . Объекты Bar хранятся в виде строк в таблице под названием BAR . Внешний ключ хранится в таблице FOO в столбце barId .

Обратите внимание, что значение mappedBy - это имя поля для объекта, а не имя столбца.

введите описание изображения здесь

Однонаправленные отношения «один ко многим» с использованием таблицы соединений с управляемым пользователем

@Entity
@Table(name="FOO")
public class Foo {
    private UUID fooId;
    
    @OneToMany
    @JoinTable(name="FOO_BAR",
        joinColumns = @JoinColumn(name="fooId"),
        inverseJoinColumns = @JoinColumn(name="barId", unique=true))
    private List<Bar> bars;
}

@Entity
@Table(name="BAR")
public class Bar {
    private UUID barId;

    //No Mapping specified here.
}

@Entity
@Table(name="FOO_BAR")
public class FooBar {
    private UUID fooBarId;

    @ManyToOne
    @JoinColumn(name = "fooId")
    private Foo foo;

    @ManyToOne
    @JoinColumn(name = "barId", unique = true)
    private Bar bar;

    //You can store other objects/fields on this table here.
}

Задает одностороннюю связь между одним объектом Foo и многими объектами Bar используя промежуточную таблицу соединений, которую управляет пользователь.

Это похоже на отношения ManyToMany , но если вы добавите unique ограничение к целевому внешнему ключу, вы можете OneToMany его использовать OneToMany .

Объекты Foo хранятся в виде строк в таблице под названием FOO . Объекты Bar хранятся в виде строк в таблице под названием BAR . Отношения между объектами Foo и Bar хранятся в таблице FOO_BAR . В приложении есть объект FooBar .

Обратите внимание, что отображение объектов Bar обратно на объекты Foo . Объекты Bar могут свободно манипулировать, не затрагивая объекты Foo .

Очень часто используется с Spring Security при настройке объекта User которого есть список Role , который они могут выполнять. Вы можете добавлять и удалять роли для пользователя, не беспокоясь о том, что каскады удаляют Role .

введите описание изображения здесь

Однонаправленные отношения «один к одному»

@Entity
@Table(name="FOO")
public class Foo {
    private UUID fooId;
    
    @OneToOne
    private Bar bar;
}

@Entity
@Table(name="BAR")
public class Bar {
    private UUID barId;
    //No corresponding mapping to Foo.class
}

Задает одностороннюю связь между одним объектом Foo и одним объектом Bar .

Объекты Foo хранятся в виде строк в таблице под названием FOO . Объекты Bar хранятся в виде строк в таблице под названием BAR .

Обратите внимание, что отображение объектов Bar обратно на объекты Foo . Объекты Bar могут свободно манипулировать, не затрагивая объекты Foo .

введите описание изображения здесь



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow