hibernate
Связывание сущностей Hibernate с использованием аннотаций
Поиск…
параметры
| аннотирование | подробности |
|---|---|
@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 .





