2013-08-03 3 views
2

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

Категория:

@Entity 
public class Category { 

    @Id 
    @Column(name = "CATEGORY_ID") 
    Long id; 

    @NotNull 
    String name; 

Подкатегория:

@Entity 
public class Subcategory { 

    @Id 
    @Column(name = "SUBCATEGORY_ID") 
    Long id; 

    @NotNull 
    @ManyToOne(targetEntity = Category.class) 
    @JoinColumn(name = "CATEGORY_ID") 
    Long categoryId; 

    @NotNull 
    String name; 

Когда я пытаюсь добавить подкатегорию в существующую категорию, я получаю

ERROR [org.jboss.ejb3.invocation] JBAS014134: EJB Invocation failed on component SubcategoryController for method public void %package%.SubcategoryController.add(%package%.Subcategory): javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of %package%.Category.id 
... 
    at %package%.SubcategoryController$$$view1.add(Unknown Source) 
... 
    at %package%.SubcategoryController$Proxy$_$$_Weld$Proxy$.add(SubcategoryController$Proxy$_$$_Weld$Proxy$.java) 
    at %package%.SubcategoryService.add(SubcategoryService.java:30) 
    at %package%.SubcategoryService$Proxy$_$$_WeldClientProxy.add(SubcategoryService$Proxy$_$$_WeldClientProxy.java) 
... 
Caused by: javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of %package%.Category.id 

Что мне делать, чтобы избежать этой ошибки?

ответ

1

В вашей категории класса она должна быть OneToMany аннотацию, как это:

@Entity 
public class Category {  
    @Id 
    @Column(name = "CATEGORY_ID") 
    Long id;  
    @NotNull 
    String name;   
    @OneToMany(mappedBy = "category") 
    List<Subcategory> subcategories;  
} 

Вы также можете проверить:
www.mkyong.com/hibernate/hibernate-one-to-many-relationship-example-annotation/

+0

Я проанализировал данный пример и обнаружил, что изменить 'Long categoryId' на' Category category' будет достаточно, но это не решит мою проблему. Есть ли еще какие-либо решения (мне не нужен список дочерних элементов в родительском классе)? –

+0

@OneToMany поля являются необязательными, hibernate НЕ генерирует исключение, если вы их не используете. –

0

ситуации, при которых может произойти это исключение:

1) неверно указано название таблицы базы данных:

@Entity 
@Table(name = "category_table") // name of database table 
public class Category 

2) поле класса не соответствует целевой класс:

@ManyToOne(targetEntity = Category.class) // Target class 
@JoinColumn(name = "CATEGORY_ID") 
Category categoryId;      // Target field 

В вашем случае categoryId имеет тип Long и спящий режим пытается вставить Category.class поля в categoryId но может» т.