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
.