JPA @OneToMany и @ManyToOne: обратная ссылка пуста - PullRequest
7 голосов
/ 18 ноября 2010

У меня следующая структура данных.

@Entity
public class Device extends AbstractEntity implements Serializable{
    private int id;
    //...
    private List<Item> items;

    @OneToMany(fetch=FetchType.EAGER) 
    public List<Item> getItems() {
 return configurationItems;
    }
}

каждый элемент содержит обратную ссылку на устройство:

class Item {
    private Device;
 @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH} )
 public Device getDevice() {
  return device;
 }
}

Я могу создавать устройства, добавлять элементы и сохранять все это. Я могу получить объекты из БД, и все работает, кроме ссылки на устройство, которое содержит этот элемент.

И не важно, как я читаю пункты: 1. прочитать устройство со всеми связанными элементами 2. читать пункты

Ссылка на устройство всегда равна нулю. Я думаю, что-то не так с моей аннотацией @ ManyToOne.

Я использую hibernate и spring, реализуя DAO, создав подкласс HibernateDaoSupport.

Вот пример кода, который извлекает все элементы:

getHibernateTemplate().loadAll(Item.class)

1 Ответ

10 голосов
/ 18 ноября 2010

Поскольку у вас двунаправленное отношение один ко многим, вам необходимо использовать mappedBy:

@OneToMany(fetch=FetchType.EAGER, mappedBy = "device")  
public List<Item> getItems() { 
    return configurationItems; 
} 

См. Также:

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