OpenJPA在序列化对象上保存NULL日期值

时间:2015-11-17 13:17:56

标签: java jpa dao openjpa dto

我们正在使用OpenJPA 2.3.0。我们有DAO实体具有Date类型属性并且与其他DAO实体有关系。我们从数据库中检索数据,将其映射到类似的DTO对象并通过网络传递。我们还通过线路接收相同的DTO对象,将这些对象映射回DAO并将数据持久保存到DB。

我们遇到了Date字段的问题,当客户端NULL日期字段并且我们保持更改时,OpenJPA不会将字段更新为NULL,因为它无法确定该值是否首先加载。 / p>

我们尝试了这个persistence.xml设置:

<property name="openjpa.DetachState" value="fetch-groups"/>

其中修复了日期保存问题,但后来在其他实体上造成了问题。这个问题是引用其他DAO实体的DAO实体(使用ManyToOne或OneToOne引用等)。由于这些引用的实体最初未加载,当我们持久保存父实体时,子引用将为NULL,因此OpenJPA将删除子引用(已启用级联持久性以进行保存)。

为了解决第二个问题,我们开启了对这些子实体的急切加载,但是当并不总是需要加载时会导致大量额外数据被加载。我们需要将其关闭,因为它会导致DB上的负载过高。

我很想知道是否有其他人找到了更优雅的解决方案来保存序列化的DAO实体上的Date属性的NULL值。

参考类别:

@Entity
public class Parent implements Serializable {

@OneToMany(cascade = CascadeType.ALL, mappedBy = "child", fetch = FetchType.EAGER)
private List<ChildType> children;

@Temporal(TemporalType.DATE)
private Date endDate;
...

1 个答案:

答案 0 :(得分:0)

你试过吗?

JDBC:MySQL的:// HOST:3306 / DBNAME的 zeroDateTimeBehavior = convertToNull &#34;