是否可以使用JPA持久化DSL Java对象?
我有一个DSL Java对象,即一个POJO,它在setters中返回是否可以使用JPA持久化DSL Java对象?,java,jpa,dsl,Java,Jpa,Dsl,我有一个DSL Java对象,即一个POJO,它在setters中返回this,加上getter/setters有一个不寻常的命名模式: public class Demo { private long id; private String name; private Date created; public Demo id (long value) { id = value; return this; } public String id () { r
this
,加上getter/setters有一个不寻常的命名模式:
public class Demo {
private long id;
private String name;
private Date created;
public Demo id (long value) { id = value; return this; }
public String id () { return id; }
public Demo name (String value) { name = value; return this; }
public String name () { return name; }
public Demo created (Date value) { created = value; return this; }
public Date created () {
if (created == null) created = new Date ();
return created;
}
}
可以告诉JPA使用“name(String)”和“name()”作为setter/getter方法吗
[编辑]我的问题是上面创建的字段。对于该字段,我希望JPA使用“getter”created()
,因此该字段将始终为非空
或者有没有一种方法可以告诉JPA在使用created==null
创建新对象时使用CURRENT TIMESTAMP
?根据JPA规范(请参阅)第2.1.1章,您可以通过注释映射信息的字段而不是getter方法来告诉JPA使用字段访问而不是属性访问
我不认为您可以告诉JPA使用哪种命名约定作为getter和setter,因为这是一个基本的JavaBeans概念。当您在类中定义时,是否可以简单地初始化创建的,然后使用字段访问
private Date created = new Date();
哦,忘了提到你必须使用注释。不知道它是否适用于xml映射:-/如果我不想使用属性访问权限?这就是我提到的。将注释放在字段之前。现在,在您编辑您的帖子之后,问题仍然存在,“created”可能为空。我认为您可以使用@Column注释的属性“columDefinition”来定义此列的默认值(请参阅上述规范的第9.1.5章)。因为在我的情况下,new Date()是一个昂贵的操作:)我真的希望惰性地这样做。