2016-07-15 8 views
0

У меня есть эти 2 таблицыкартографирования два поля из одной таблицы на другие

Users(
    id PK, 
    name VARCHAR(30) 
); 

Другая таблица

Orders(
    id PK, 
    orderBy FK Users.id, 
    orderTo FK Users.id 
); 

Теперь, что я хочу сделать, это создать Orders класс сущностей, который отображает orderBy и orderTo. Но самое главное, что я смущаюсь, это то, что каскадировать я должен использовать.

class Orders{ 
    /// 
    @ManyToOne(fetch = FetchType.Lazy 
    @JoinColumn(name="orderBy") 
    Users orderBy; 

    /// 
    @ManyToOne(fetch = FetchType.Lazy 
    @JoinColumn(name="orderTo") 
    Users orderTo; 

} 

Я имею в виду, чтобы создать два поля в таблице Users таким образом, что

class Account{ 
    /// 
    @OneToMany(fetch = FetchType.Lazy) 
    @JoinColumn(name="orderTo") 
    List<Orders> ordersReceived; 

    /// 
    @OneToMany(fetch = FetchType.Lazy) 
    @JoinColumn(name="orderBo") 
    List<Orders> ordersPlaced; 

} 

Но опять же, я не уверен, что каскадные должен я использовать. Моя таблица Users будет заполнена некоторыми другими процессами, поэтому orders не имеет ничего общего. Я не хочу, когда я размещаю заказ, эта конкретная транзакция должна добавлять/удалять что-либо. ОДНАКО, мне может потребоваться обновить определенное поле User всякий раз, когда я делаю заказ.

ответ

0

Я предлагаю, чтобы избежать использовать каскад вообще (если это возможно) ... Когда вы делаете заказ, вы должны выполнить следующие шаги:

1) Несущая вашего пользователя из базы данных

2) создать свой заказ ...

3) LinkUp ваш заказ к вашему пользователю (это, order.setOrderBy(user))

4) сохраняются ваш заказ с вашим EntityManager.

5) Измените свой атрибут пользователя.

Из моего опыта, Каскад следует использовать осторожно. Я использовал его только для сохранения объектов в одной съемке (Cascade.PERSIST) (пример: сохранение нового пользователя с другими новыми объектами, такими как заказы)

+0

Спасибо, поэтому я не должен указывать специфический 'cascade' вообще? Каковы значения 'cascade' по умолчанию для объекта, если я ничего не укажу? –

+0

Нет дефолта ... так что это будет что-то вроде Каскада «Ничего»! (Пожалуйста, если вы считаете, что это было полезно, не забудьте проголосовать за меня!) –