在JSF表格中有:
<h:inputText value="#{personBean.person.personDetail.attribute}" />
实体Person
是从PostConstruct
带注释的方法的数据库加载的。但是,personDetail
实例的属性Person
可以为null。因此,当填写输入并提交表单时,会抛出异常(更具体地说是javax.el.PropertyNotFoundException: (...) Target Unreachable, ''personDetail'' returned null
)。
我搜索并找到了一些很好的例子来解决这个异常,例如:
但是,我认为这个问题不同。找到person
实例,其实例属性可以为null。
我还尝试在PersonDetail
方法上为空时设置PostConstruct
的新实例,但由于“对象(personDetail
),问题变成了持久性问题引用未保存的瞬态实例“。
那么,如何处理这个问题?
短支持bean:
@Named(value = "personBean")
@ViewScoped
public class PersonBean {
(...)
@PostConstruct
public void init() {
person = personService.findById(1L);
// throw -> TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing
// if (person.getPersonDetail() == null) {
// person.setPersonDetail(new PersonDetail());
// }
(...)
}
}
短实体类:
@Entity
public class Person {
(...)
@OneToOne(mappedBy = "pessoa", fetch = FetchType.LAZY)
private PersonDetail personDetail;
// Getters and Setters
}
-
public class PersonDetail {
private String attribute;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "person_id", unique = true, nullable = false)
private Person person;
// Getters and Setters
}
答案 0 :(得分:0)
通过 personDetail 实现解决方案的第一部分 null ,第二部分是在插入数据库之前进行检查
如果personDetail.getAttributes!= null则插入其他插入 空