0

私は JSF2.1(PF3.5) + EJB(3.1) + JPA(eclipselink2.4.1) で開発しています。facelet には、ajax を使用して「Merchant」エンティティを検索するための入力ボックスを備えたフォームがあります。「Merchant」はレストランの外部キーであるため、「Restaurant」エンティティに関連付けるには、検索されたマーチャント参照が必要です。たとえば、あるフォームで検索された Merchant の値を取得し、それらの値を別のフォームの入力フィールド内にレンダリングできます。このマーチャント参照を、この 2 番目のフォームにある別のレストラン フィールドに沿って転送する方法がわかりません。このマーチャントのフィールドにアクセスできる限り、エンティティ コンバーターが必要だと思いますが、私が行ったことは機能していません。以下、関連するコード:

これは、最初のフォームの検索ボックスです。

    <p:inputText value="#{merchantMB.searchValue}" required="true"
        requiredMessage="Pf associe um comerciante ao Restaurante!">
        <f:ajax event="blur" listener="#{merchantMB.search}"
        render="results :restaurantDetailForm:merchantFirstName:restaurantDetailForm:merchantEmail" />
        </p:inputText>

検索されたエンティティから値にアクセスできる 2 番目のフォーム:

<h:outputText value="Nome Comerciante: " />
<p:inputText id="merchantFirstName"
    value="#{merchantMB.searchedMerchant.firstName}" readonly="true">
</p:inputText>

<h:outputText value="Email Comerciante: " />
<p:inputText id="merchantEmail"
    value="#{merchantMB.searchedMerchant.email}" readonly="true">
</p:inputText>

この 2 番目のフォームでは、searchedMerchant ID を関連付ける必要があります。この値は Restaurant エンティティへの外部キーであるためです。また、このフォームでは、次のように関連するフィールドにアクセスできます。

<h:outputText value="Nome Restaurante: " />
<p:inputText id="name"
    value="#{restaurantMB.selectedRestaurant.name}" required="true"
    requiredMessage="Pf introduza o nome!">
    <p:watermark for="name" value="Nome" />
</p:inputText>

マネージ Bean(restaurantMB) を介してsearchedMerchantId を送信し、それを restaurantMB.selectedRestaurant.merchant.id に関連付けるにはどうすればよいですか?

ここに私のレストランMB(関連部分):

// Selected restaurant that will be updated
private Restaurant selectedRestaurant;

@PostConstruct
public void init() { //
    newRestaurant = new Restaurant();
    newRestaurant.setDateOfInscriptionAsRestaurant(getCurrentTimeStamp());

    lazyModel = new LazyRestaurantDataModel(das);

    selectedRestaurant = new Restaurant();
    selectedRestaurant.setMerchant(new Merchant());
}

そして私のレストランエンティティ(関連部分):

@Entity
@Table(name = "RESTAURANTS")

public class Restaurant extends BaseEntity implements Serializable {

    /...other stuff.../

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "merchantID")
    private Merchant merchant;  <---------THIS IS THE FK

    /**
     * @return the merchant
     */
    public Merchant getMerchant() {
        return merchant;
    }

    /**
     * @param merchant the merchant to set
     */
    public void setMerchant(Merchant merchant) {
        this.merchant = merchant;
    }

    public Restaurant() {
    }
}

Merchant エンティティに hashcode と equals があり、現在永続化されたエンティティは 1 つだけです。コンバーターは必要ですか?これをトラブルシューティングするにはどうすればよいですか?

4

1 に答える 1