【问题标题】:jsf hibernate crud form relationshipjsf hibernate crud表单关系
【发布时间】:2014-04-28 15:17:05
【问题描述】:

我正在使用休眠 4、jsf 2.2 和 primefaces 4。 当我创建具有关系的实体 CRUD 表单时,我应该使用哪种策略?

使用对象进行关系,以及实体通用转换器:

<h:inputHidden id="gender" value="#{user.gender}" converter="entityconverter"/>

或者使用object.id

<h:inputHidden id="gender_id" value="#{user.gender.id}" />

更新: 我正在使用 Netbeans 创建的标准实体和数据库中的实体。

用户.java:

@JoinColumn(name = "gender", referencedColumnName = "id") 
@ManyToOne(optional = false, fetch = FetchType.LAZY) 
private Gender gender; 

public Gender getGender() {
    return gender;
}

性别.java:

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Basic(optional = false)    
@Column(name = "id") 
private Long id

public Long getId() {
    return id;
}

【问题讨论】:

  • 对我来说 object.id 看起来通用且简单。 entityconverter 是否特定于任何特定框架,如 JSF ?
  • 当我使用 object.id 第一次加载表单时,我得到对象的 NullPointerException。 Entityconverter 是一个自定义的面孔转换器。教程:docs.oracle.com/javaee/6/tutorial/doc/bnaus.html
  • 你能把 user.getGender() & gender.getId() 的代码贴出来吗?
  • 我正在使用 Netbeans 创建的标准实体和数据库中的实体。用代码更新问题。
  • 还有 user.getGender() & gender.getId() 代码?

标签: hibernate jsf primefaces crud


【解决方案1】:

我认为当您第一次加载页面时,gender 属性为空,因此您得到 NPE。 您可以尝试通过添加这样的空检查,

public Gender getGender() {
    if(gender == null) {
        gender = new Gender();
    }
    return gender;
}

【讨论】:

  • 是的,我知道。但是我的实体是通过 netbeans 中的逆向工程生成的。如果我使用这个策略,我将不得不编辑所有实体。在表中更改后,我将重新创建实体,所有更改都将消失。相反,我更愿意将它初始化为表单的支持 bean。我想了解 java 大师是使用这种方法还是使用面部转换器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-15
  • 2017-08-30
  • 2013-10-07
  • 1970-01-01
  • 2021-05-28
相关资源
最近更新 更多