Покидая "однонаправленный" в сторону на данный момент, можно моделировать отношения с клиентами-Order следующим образом.
@Entity
public class Customer {
// ...
@Id @GeneratedValue
int id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "customer")
Set<Order> orders;
// ...
}
@Entity
public class Order {
// ...
@ManyToOne(optional = false)
Customer customer;
// ...
}
Здесь я предполагаю, что каждый заказ имеет ровно один Заказчик. В базе данных в таблице «Порядок» будет столбец «customer_id» с внешним ключом в столбец «id» таблицы Customer. DDL выглядел бы следующим образом.
CREATE TABLE Customer (
id INT NOT NULL,
...
PRIMARY KEY (id)
);
CREATE TABLE Order (
...
customer_id INT NOT NULL,
...
FOREIGN KEY (customer_id) REFERENCES Customer (id)
);
Хотя класс Customer содержит набор заказов, это никак не влияет на структуру базы данных; это просто удобный способ получения/управления заказами, принадлежащими клиенту. Например, вы можете полностью отключить элемент «заказы» от клиента и полагаться на запросы для извлечения этих записей.
Пункт, который я пытаюсь сделать, состоит в том, что с точки зрения базы действительно нет такой вещи, как «однонаправленное» отношение. В примере reverendgreen предоставлены классы Java, где нет пути , чтобы получить объект Customer из объекта Order, но результирующая структура базы данных будет идентичной (игнорируя незначительные различия в именах столбцов). Вы всегда можете найти клиента для данного заказа с помощью запроса.
Обратите внимание, что JPA 1.0 не ** поддерживает ** однонаправленную связь OneToMany ** без ** 'JoinTable'. Другими словами, вы не можете сопоставить модель вышеприведенных таблиц с однонаправленным «OneToMany» и, таким образом, точно не показывать ваш ответ. –
Паскаль прав. Вышеприведенный пример работает только для JPA 2.0. –
@JoinColumn (name = "cust_id", referendedColumnName = "owner_id") прав? – uuidcode