2

私の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

EDIT
これが私のマネージドBeanの内容です。

@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);
    }
}
4

3 に答える 3

2

#{newUserController.group}または返され#{newUserController.group.groupKey}ますnull。JSF は最後のプロパティ (groupIdこの場合) のみを設定します。これがテンプレート エンティティの場合は、groupand/orのデフォルト値と null 以外の値を提供/事前設定する必要がありますgroupKey。たとえば、Bean の (ポスト) コンストラクターでこれを行うことができます。これが既存のエンティティである場合は、それらのプロパティが JPA によって適切に事前設定されていることを確認する必要があります。

于 2010-08-10T23:59:22.027 に答える
2

を追加して解決しました

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

グループ クラスに追加すると、初期化され、null は返されません。

于 2012-04-09T02:43:58.203 に答える
1

PostConstruct は私にとってはうまくいきませんでした (しかし、私は初心者なので、その価値があると考えてください)。ただし、それをエンティティ クラス コンストラクターに追加することはできました。

public Group() {
   this.groupKey=new GroupKey();
}
于 2013-12-19T14:42:24.297 に答える