Я борюсь с JPA. Я пробовал несколько вещей, но я не могу понять, как правильно разместить аннотации. Что такое желание, как отношение Order/OrderLine.Hibernate - отображение атрибута OneToMany. (например, OrderLine) Не ассоциация
Таким образом:
- заказа (PK = OrderId, поля = [...])
- OrderLine (Pk1 = OrderId, pk2 = orderLineId, поля = [...])
Очевидно, что OrderLine.orderId относится к таблице «Заказ».
Что функционально нужно сделать, это по крайней мере:
- получить орден с и без всех OrderLines. Он должен иметь набор
- получить строку заказа полным ПК, но без соответствующего заказа.
- получить список ордеров на заказ.
Мне нужны только эти 2 таблицы и классы. ни больше ни меньше. Я пробовал несколько вещей. Может ли кто-нибудь помочь мне с введением правильных аннотаций и членов в этих двух классах?
Редактировать: что я сделал до сих пор. Обратите внимание, что в этом реальном примере User = Order и UserRun = OrderLine. Поэтому меня не интересует отдельный «Run» -объект. Просто UserRun, как описано в Orderline.
@Entity
@Table(name = "user_runs")
public class UserRun {
@EmbeddedId
private UserRunKey id;
public UserRun(){};
public UserRun(String userName, String runUuid) {
this.id = new UserRunKey(userName, runUuid);
}
public String getUserName() {
return this.id.getUserName();
}
public String getRunUuid() {
return this.id.getRunUuid();
}
}
@Embeddable
class UserRunKey implements Serializable {
@Column(name = "username")
private String userName;
@Column(name = "run_uuid")
private String runUuid;
public UserRunKey(){};
public UserRunKey(String userName, String runUuid) {
this.runUuid = runUuid;
this.userName = userName;
}
public String getUserName() {
return userName;
}
public String getRunUuid() {
return runUuid;
}
}
Это создало таблицу userruns/OrderLine с ПК в неправильном направлении: создать таблицу user_runs (run_uuid VARCHAR (255) NOT NULL, имя пользователя VARCHAR (255) NOT NULL, первичный ключ (run_uuid, имя пользователя))
- Я хочу, чтобы первичный ключ в обратном порядке.
- Я хочу, чтобы имя пользователя как FK для пользователя
- Я хочу набор в моем пользовательском классе.
Когда я делаю следующее в моем User-класс:
@OneToMany
private Set<UserRun> userRuns;
Это создаст создать таблицу user_user_runs (user_username VARCHAR (255) NOT NULL, user_runs_run_uuid VARCHAR (255) NOT NULL, user_runs_username varchar (255) не null, первичный ключ (user_username, user_runs_run_uuid, user_runs_username)) И это то, что я определенно не хочу! Еще раз, я не хочу Run-object (так же, как никто не интересуется линейным классом, из OrderLine)
Вы должны отправить то, что вы делали до сих пор и объяснить вашу проблему с этим. – davidxxx
отредактировал исходное сообщение. Хотя, я думаю, это делает вопрос более неясным. В основном это должно быть так: я хочу 2 класса: Order, OrderLine. Мне также нужны 2 таблицы: Order (pk = orderId), OrderLine (pk = (orderId, orderLineId)). Как я могу сделать такой простой пример с аннотациями JPA? –
Все было бы намного проще, если бы runUuid (который кажется уникальным с учетом его имени и, следовательно, достаточен для уникальной идентификации UserRun), был основным ключом объекта. Тогда у вас будет простая стандартная ассоциация OneToMany, отображаемая столбцом объединения. –