2009-05-19 7 views
0

У меня есть объект DSL Java, т.е. POJO, который возвращает this в инкубационных плюс добытчиками/сеттеры имеют необычный характер именовании:Возможно ли сохранение объекта DSL Java с помощью JPA?

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 использовать «имя (String)» и "name()" как метод setter/getter?

[EDIT] Моя проблема - поле created. Для этого поля я хочу, чтобы JPA использовала «getter» created(), поэтому поле всегда будет не-NULL.

Или есть способ сообщить JPA использовать CURRENT TIMESTAMP при создании нового объекта с created == null?

ответ

0

В соответствии со спецификацией JPA (см. JSR-220), глава 2.1.1 вы можете сообщить JPA использовать доступ к полям вместо доступа к ресурсам, аннотируя поля для отображения информации, а не методы получения.

Я не думаю, что вы можете сказать JPA, что соглашение об именах используется для геттеров и сеттеров, поскольку это базовая концепция боба.

+0

О, забыл упомянуть, что вы должны использовать аннотации. Не знаю, работает ли это с отображением xml. : -/ – rudolfson

+0

И если я не хочу использовать доступ к собственности? –

+0

Вот что я упомянул. Поместите аннотации перед полями. Теперь, после того как вы отредактировали сообщение, проблема остается, что «созданный» может быть нулевым. Я думаю, вы могли бы использовать атрибут «columDefinition» аннотации @Column для определения значения по умолчанию для этого столбца (см. Главу 9.1.5 упомянутой спецификации). – rudolfson

0

Не могли бы вы просто ввести intlize created, когда вы определяете в классе, а затем используете доступ к полю.

private Date created = new Date(); 
+0

Потому что в моем случае новая дата() - дорогостоящая операция :) Я очень хочу сделать это лениво. –