2014-08-28 2 views
0

У меня есть гибернации Entity «Интранет», который имеет этот код:NullPointerException при добавлении сотрудника в Hibernate

// Imports removed 

@Entity 
@Table(name = "intranets", uniqueConstraints = @UniqueConstraint(columnNames = "company_name")) 
@Cacheable 
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 
public class Intranet { 

    @Id 
    @Column(name = "INTRANET_ID") 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int intranetId; 

    @Column(name = "owner_id") 
    private int ownerId; 

    @Column(name = "setup_done") 
    private boolean isSetUp = false; 

    @Column(name = "company_name") 
    private String companyName; 

    @ElementCollection 
    @CollectionTable(name = "employees") 
    @Column(name = "employee") 
    private List<Integer> employeeIds; 


    public int getIntranetId() { 

     return intranetId; 
    } 

    public void setIntranetId(int intranetId) { 

     this.intranetId = intranetId; 
    } 

    public boolean isSetUp() { 

     return isSetUp; 
    } 

    public void setSetUp(boolean isSetUp) { 

     this.isSetUp = isSetUp; 
    } 

    public String getCompanyName() { 

     return companyName; 
    } 

    public void setCompanyName(String companyName) { 

     this.companyName = companyName; 
    } 

    public int getOwnerId() { 

     return ownerId; 
    } 

    public void setOwnerId(int ownerId) { 

     this.ownerId = ownerId; 
    } 

    public List<Integer> getEmployeeIds() { 

     return employeeIds; 
    } 

    public void setEmployeeIds(List<Integer> employeeIds) { 

     this.employeeIds = employeeIds; 
    } 

    public void addEmployee(int id) { 
     this.employeeIds.add(id); 
    } 

    public void removeEmployee(int id) { 
     this.employeeIds.remove(new Integer(id)); 
    } 
} 

Как вы можете видеть, я добавил два метода, которые непосредственно не являются добытчиками и сеттеров, но они» как удобные методы для легкого доступа к коллекции и добавления/удаления сотрудников.

Когда я вызываю «addEmployee()» в своей программе, я получаю простое исключение NullPointerException. Вопрос в основном равен , как я могу инициализировать коллекцию, чтобы не было null, потому что я читал, что Hibernate использует внутренние реализации коллекций и не просто принимает ArrayList.

Благодарим за помощь.

+0

Вызов 'setEmployeeIds()' перед 'addEmployee()'. –

ответ

2

У вас есть NullPointerException, потому что вы должны сами инициализировать список. Неважно, какую реализацию вы используете. Это исправит вашу проблему:

@ElementCollection 
@Column(name = "employee") 
private List<Integer> employeeIds = new ArrayList<>(); 
+0

Ах круто, спасибо. Таким образом, информация о внутренних реализациях Hibernate, которые отличаются от ArrayList и других, неверна? Или Hibernate просто установил его для реализации? – MrPixelDream

+0

Ну, я не знаю, где вы это читали, но я не думаю, что Hibernate нуждается в каких-либо реализациях List. Я имею в виду, что пока мы предоставляем что-то, что реализует List, hibernate будет просто использовать функции, которые находятся в этом интерфейсе. Не важно, что это за интерфейс. – Zakor

Смежные вопросы