Hibernate OneToMany и ManyToOne путаница! Нулевой список! - PullRequest
4 голосов
/ 26 января 2011

У меня есть две таблицы ... Например - Компания и Сотрудник (давайте сделаем это по-настоящему простым)

Company( id, name );
Employee( id,  company_id );

Employee.company_id - это внешний ключ.

Моя модель сущности выглядитвот так ...

Сотрудник

@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "company_id")
Company company;

Компания

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "company_id")
List<Employee> employeeList = new ArrayList<Employee>();

Итак, да, я хочу списоксотрудников компании.

Когда я делаю следующее ...

Employee e = new Employee();
e.setCompany(c); //c is an Company that is already in the database.
DAO.insertEmployee(e); //this works fine!

Если я получу объект моей компании, его список будет пуст!

Я пытался бесконечноотличается от документации по Hibernate!

Очевидно, что еще не попробовал правильный!

Я просто хочу, чтобы список был заполнен для меня или нашел разумную альтернативу.

Помощь будет принята с благодарностью, спасибо!

Ответы [ 2 ]

5 голосов
/ 26 января 2011

Вам нужно сделать отношения двунаправленными. У тебя два однонаправленных. Добавьте mappedBy = "company" к employeeList. Это говорит о том, что hibernate список сотрудников просто обратная ссылка с Employee на Company

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "company")
List<Employee> employeeList = new ArrayList<Employee>();
0 голосов
/ 13 марта 2011

Я не думаю, что вы должны делать List<Employee> employeeList = new ArrayList<Employee>(); Это должно быть сделано, когда вы определили сторону, у которой в списке есть сторона-владелец, в вашем случае это Сотрудник, а не Компания. Я думаю, что каждый раз, когда вы загружаете экземпляр Company, вы получаете новый экземпляр employeeList, хотя и не уверен. Но, разумеется, нет необходимости каждый раз создавать новый ArrayList.

...