Работа с отношениями Hibernate - PullRequest
1 голос
/ 12 июля 2011

Я работаю в Hibernate. У меня есть 3 сущности, вот отношения между ними:

Пользователь 1 -> N заказов 1 -> N деталей заказа

как я могу добавить строку в таблице "Детали заказа" конкретного Заказа для данного пользователя?

Я знаю, как добавить новую строку в таблицу «Заказы и детали заказа», что-то вроде этого:

User user=(User)session.get(User.class, username);
Order order=new Order();
OrderDetails orderDetails=new OrderDetails();
orderDetails.setAmount(1);
order.addOrderDetails(orderDetails);
user.addOrder(order);
session.save(user); 
transaction.commit();

Это правильно?

Но что происходит, когда я хочу добавить только строку в таблицу addOrderDetails определенного Заказа для данного Пользователя? Могу ли я сделать это?

List<Order> o=session.createCriteria(Order.class) 
.add( Restrictions.eq("idUser", User) );
o.get(0).addOrderDetails(orderDetails);

На самом деле я не знаю, как работать с таблицами. Заказы и детали заказов, я должен делать из таблицы пользователей? Как? Используя Критерии из таблицы User, я могу только получить список пользователей, но не могу работать с другими таблицами.

Спасибо

Ответы [ 2 ]

0 голосов
/ 12 июля 2011

Кажется, что пользователю может принадлежать много ресурсов, если вы получаете доступ к заказам из объекта User, это может повлиять на производительность.

// user.addOrder(order);
// session.save(user); 
order.setUser(user);
session.save(order);

Также удаление свойства orders из класса User приведет к очистке дизайна. Но опять же, это зависит от бизнес-модели.

0 голосов
/ 12 июля 2011

Если у вас есть сопоставление, которое представляет ваши отношения, вы можете получить пользователя, и у пользователя будет набор или список с элементами типа Order. Затем вы можете обновить конкретный заказ.

Методы, которые вы описали, также правильны, если не считать некоторых ошибок (например, позвоните list() по критериям, чтобы получить список).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...