Цель недоступна при доступе к составному ключу из JSF - PullRequest
2 голосов
/ 11 августа 2010

Внутри моего JSF я сделал

<h:outputLabel value="Group:" for="group" />
<h:inputText id="group" value="#{newUserController.group.groupKey.groupId}" title="Group Id" />

Group.java

@Entity
public class Group {

    @EmbeddedId
    private GroupKey groupKey;

    @ManyToOne
    @JoinColumn(name="userId")
    private User user;
    //setter, getter, constructors, equals and hashes
}

GroupKey.java

@Embeddable
public class GroupKey {

    @Column(name="userId", insertable=false, updatable=false)
    private String userId;

    private String groupId;
    //setter, getter, constructors, equals and hashes
}

Поэтому, когда я пытаюсь сохранить объект,это дает мне эту ошибку

value="#{newUserController.group.groupKey.groupId}": Target Unreachable, 'null' returned null

РЕДАКТИРОВАТЬ
Вот содержание моего управляемого компонента.

@ManagedBean(name="newUserController") 
@RequestScoped
public class NewUserController {

    private User user = new User();

    private Group group = new Group();    

    @EJB
    DocumentSBean sBean;

    public void createNewUser(){
        user.addGroup(group);
        sBean.persist(user);
    }
}

Ответы [ 3 ]

2 голосов
/ 09 апреля 2012

Я решил это, добавив

 @PostConstruct
   public void init(){
     groupKey=new GroupKey();
 }

в Group Class, он будет инициализирован и не вернет ноль.

2 голосов
/ 11 августа 2010

Либо #{newUserController.group}, либо #{newUserController.group.groupKey} возвращено null. JSF будет устанавливать только свойство last (в данном случае groupId). Если это шаблонная сущность, вам нужно предоставить / предварительно установить значение по умолчанию и ненулевое значение для group и / или groupKey. Вы можете сделать это, например, в (post) конструкторе компонента. Если это существующая сущность, вам нужно убедиться, что эти свойства правильно заполнены JPA.

1 голос
/ 19 декабря 2013

PostConstruct не работает для меня (но я новичок, так что возьми это за то, что он стоит). Однако добавление его в конструктор класса сущности сделало.

public Group() {
   this.groupKey=new GroupKey();
}
...