我正在使用 Spring + JSF2 + Hibernate 构建一个 Web 应用程序。两个相关的类如下所示:
@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 绑定到这些类。
我的问题是如果所有字段都留空(用户不提交任何值),如何告诉休眠不保存自动绑定的电话号码?换句话说,我希望保存 Person 对象,但不希望phone_numbers
表中出现空字符串的记录。
如果有人知道,还有两个额外的问题。
- Spring 何时绑定 PhoneNumber - 在创建人员时或来自 JSF 的 PhoneNumber 请求时?
- [已解决] 我的表单中有没有用
required
JSF 中的属性标记的字段。显然,如果这些字段为空,则不应触发验证。问题是,当我配置 Hibernate 验证器时,即使留空,现在也会验证这些非必填字段。是否有任何方法可以跳过未标记为required
JSF 的空字段的验证?我试图设置bean<prop key="javax.persistence.validation.mode">CALLBACK</prop>
,但这没有帮助。hibernateProperties
SessionFactory