【问题标题】:GWT/RequestFactory/JPA foreign key not merged automaticallyGWT/RequestFactory/JPA 外键未自动合并
【发布时间】:2013-12-13 03:53:53
【问题描述】:

我有以下 2 个实体:

@Entity
@Table(name = "brand")
public class Brand {

    @Id
    @Column(name = "id")
    private Integer id;

    @Column(name = "name")
    private String name;
}

@Entity
@Table(name = "car")
public class Car {

    @Id
    @Column(name = "id")
    private Integer id;

    @Version
    @Column(name = "version")
    private Integer version;

    @ManyToOne(optional=false)
    @JoinColumn(name = "brand_id", referencedColumnName = "id")
    private Brand brand;

    @Column(name = "otherproperty")
    private String otherProperty;
}

基本上,品牌将是一个预定义列表,应该永远不会更改,在 GUI 中从下拉列表中选择。 不过,我希望能够像更改任何其他属性一样更改我的汽车品牌。

这是我的 DAO 中的方法:

public void updateCar(Car update) throws Exception {

    EntityManager em = entityManager();
    try {
        em.getTransaction().begin();
        em.merge(update);
        em.getTransaction().commit();

    } finally {
        em.close();
    }
}

DAO 可以正常更新 otherProperty,但如果我提供另一个品牌作为 Car update 参数的子项,它不会更新新品牌的外键。

我尝试使用 CascadeType 属性,但它想更新品牌表,我不想要。

任何帮助将不胜感激。谢谢!


编辑:好的,我找到了解决方案,但对我来说它看起来很复杂。

如果我在 DAO 代码中添加 2 行以明确查找要更新的品牌,它会起作用:

public void updateCar(Car update) throws Exception {

    EntityManager em = entityManager();
    try {
        em.getTransaction().begin();

        Brand lookedUp = findBrandById(update.getBrand().getId());
        update.setBrand(lookedUp);

        em.merge(update);
        em.getTransaction().commit();

    } finally {
        em.close();
    }
}

但是我正在使用 GWT/RequestFactory,并为我的Brand 和一个为我的Car 实现了一个Locator,所以我假设Locator 会为我处理这项业务。

我错过了什么吗?

【问题讨论】:

    标签: gwt jpa eclipselink requestfactory


    【解决方案1】:

    您是如何找到新品牌实体以便将其与您的汽车相关联的?确保您已查找并更改了引用,而不仅仅是修改了旧品牌对象的 id 和名称。

    【讨论】:

    • 我实际上使用的是GWT/RequestFactory,所以我认为查找是由我的定位器正确完成的。周一还是要仔细检查!
    • 感谢您的提示,确实我的 RequestFactory Locator 不会自动进行查找,所以我必须自己手动进行。我对这种行为感到非常惊讶,您认为我所做的是否最佳,还是我还缺少其他东西?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 2021-07-23
    • 2011-05-26
    相关资源
    最近更新 更多