Spring + JSF2 + Hibernate を使用して Web アプリケーションを構築しています。関連する 2 つのクラスは次のようになります。
@Entity
@Table(name="people")
@Named
public class Person implements Serializable {
private int id;
private String forename;
@Inject private PhoneNumber mobile_phone;
/* Other properties */
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="mobile_phone_number_id", nullable = true)
public PhoneNumber getMobilePhone() {
return mobile_phone;
}
/* Other getters and setters */
}
@Entity
@Table(name="phone_numbers")
@Named
public class PhoneNumber {
private Integer id;
private String code;
private String number;
/* Other stuff */
}
依存性注入は Spring ( @Named
、@Inject
) によって処理されます。データベースの永続性は、Hibernate アノテーション ( @OneToOne
、@JoinColumn
) によって構成されます。JSF フォーム要素は、EL を使用してこれらのクラスにバインドされます。
私の質問は、すべてのフィールドが空白のままになっている場合 (ユーザーが値を送信しない場合)、自動バインドされた PhoneNumber を保存するように hibernate no に指示する方法です。つまり、Person オブジェクトを保存したいのですが、空の文字列を含むレコードをphone_numbers
テーブルに表示したくありません。
そして、誰かが知っていれば、2 つのおまけの質問があります。
- Spring が PhoneNumber をバインドするのはいつですか? Person の作成時、または PhoneNumber のリクエストが JSF から送信されたときですか?
required
[解決しよう] フォームに、JSFの属性でマークされていないフィールドがあります。明らかに、そのようなフィールドが空のままの場合、検証はトリガーされません。問題は、Hibernate バリデーターを構成したときに、そのような必須ではないフィールドが空白のままでも検証されるようになったことです。required
JSFのようにマークされていない空のフィールドの検証をスキップする方法はありますか? ビーンをセットしようとし<prop key="javax.persistence.validation.mode">CALLBACK</prop>
ましたhibernateProperties
がSessionFactory
、これは役に立ちませんでした。