【问题标题】:JPA 2, JSF, setting id of OneToOne mapped entity problemJPA 2,JSF,设置 OneToOne 映射实体的 id 问题
【发布时间】:2010-12-20 15:24:19
【问题描述】:

我们还没有在我们的 Web 应用程序中使用 JPA 或任何其他 ORM 工具,现在我们一直在将整个东西更新到 Java EE 6,
我的问题是 JPA ,我一直在寻找答案,并了解人们如何解决这个问题, 我有 2 个实体,

@Entity Person { @Id private long id; @JoinColumn(name="CITY_ID") @OneToOne(fetch=FetchType.LAZY) private City city; .... }

还有我的第二个实体

@实体城 { @ID 私人长ID; 私有字符串名称; ...... }

我正在查询人员实体,并在我的 jsf 页面上显示一个

我有 2 个输入字段供 Person.city 显示在我的 jsf 页面上 id 的 inputhidden 和 name 的 inputtext 然后人们从弹出窗口中选择城市 我为城市 id 设置隐藏组件,新选择的新值, 和名字一样, 到目前为止一切顺利, 当我合并 Person Entity 时,它也会尝试合并 City,但表上已经定义了一个 id,因此 Cirty Id 的约束错误。

你在为这个问题做了什么?

我认为 inputHidden 的 valueChange 操作,但在 jsf 生命周期中,它发生在更新模型之前,所以即使我用新的实体替换 Person.City 实体, 它将再次更新(实际上具有相同的值,但会执行两次) ,那么对于这种情况,最好的解决方法是什么?

感谢

【问题讨论】:

    标签: java jsf jpa


    【解决方案1】:

    您正在尝试保存一个新人并将其分配给现有城市?如果是这样,并且如果您使用的是 PersistantManager.persist(person) ,那么它会尝试创建一个新的城市,但失败了。您可以告诉从 Person 到 City 的关系要遵循哪些选项,请参阅Cascading(我猜你的情况是 MERGE)。

    【讨论】:

    • 不是新的,我在托管实体上操作,但是当我删除人员时它当然不能删除城市,让我检查级联
    • 不是级联,jsf生命周期中一定有id到entity的转换
    • 我对JSF一无所知。对不起
    【解决方案2】:

    Seam Faces ,converter 在这里解释你需要特殊的 id 到实体转换器, 那是我的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 2014-05-17
      相关资源
      最近更新 更多