JPA OneToMany, ManyToOne, двунаправленный - PullRequest
0 голосов
/ 22 декабря 2010

Я пытаюсь избавиться от следующей ошибки:

Атрибут [lcritical] в классе сущности [class pl.pwc.docs.pl704.PL704_Error] имеет значение mappedBy, равное [pl704_error], которого нет в принадлежащем ему классе сущности [class pl.pwc.docs.pl704.PL704_Error_Critical].Если владельцем класса сущности является @MappedSuperclass, это недопустимо, и ваш атрибут должен ссылаться на правильный подкласс.

PL704 @Entity class:

@Entity  
public class PL704 implements Serializable {  
    private static final long serialVersionUID = 1L;  
    @Id  
    @GeneratedValue(strategy = GenerationType.AUTO)  
    private Long id;  
    private int Status;  
    private String Comments;  
    @OneToMany(mappedBy="pl704", cascade=CascadeType.ALL, targetEntity=PL704_Error.class, fetch=FetchType.EAGER)  
    private Collection lerror = new ArrayList<PL704_Error>();

    //getters, setters...  

PL704_Error @Entity class:

@Entity  
public class PL704_Error implements Serializable {  
    private static final long serialVersionUID = 1L;  
    @Id  
    @GeneratedValue(strategy = GenerationType.AUTO)  
    private Long id;  
    private String ErrorType;  
    private String ErrorReason;  
    private String ErrorLocation;  
    private String OriginalAttributeValue;  
    @ManyToOne  
    @JoinColumn(name = "PL704_ID", referencedColumnName = "ID")  
    private PL704 pl704;  

    @OneToMany(mappedBy="pl704_error", cascade=CascadeType.ALL,     targetEntity=PL704_Error_Critical.class, fetch=FetchType.EAGER)  
    private Collection lcritical = new ArrayList<PL704_Error_Critical>();

    //getters, setters...

PL704_Error_Critical @Entity class:

@Entity  
public class PL704_Error_Critical implements Serializable {  
    private static final long serialVersionUID = 1L;  
    @Id  
    @GeneratedValue(strategy = GenerationType.AUTO)  
    private Long id;  
    @ManyToOne(cascade=CascadeType.ALL)  
    @JoinColumn(name = "PL704_ERROR_ID", referencedColumnName = "ID")  
    private PL704_Error error;  

    //getters, setters...

Подводя итог, одна PL704 банкаесть много PL704_Error.В одном PL704_Error может быть много PL704_Error_Critical.

Как изменить код для исправления ошибки?

Используется: EclipseLink 2.1.1, H2 Embedded.

Ответы [ 2 ]

3 голосов
/ 22 декабря 2010

Это должно быть

@OneToMany(mappedBy="error", cascade=CascadeType.ALL,
    targetEntity=PL704_Error_Critical.class, fetch=FetchType.EAGER)
private Collection lcritical = new ArrayList<PL704_Error_Critical>(); 

посмотрите на соответствующее имя свойства в PL704_Error_Critical:

@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "PL704_ERROR_ID", referencedColumnName = "ID")       
private PL704_Error error;   
1 голос
/ 22 декабря 2010

Неправильно отображено написание атрибутов, возможно, это причина:

В классе PL704_Error атрибут lcritical обращен к атрибуту mappedBy

@OneToMany(mappedBy="pl704_error"...

Но переменная в PL704_Error_Critical называется только error.

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