JPA - 扩展java字符串,日期

时间:2012-08-17 13:10:31

标签: java jpa

是否可以声明类型

@????? // Embeddable? 
class MyDate extends java.util.Date implements Serializable{

    //.. lots of logic, but no new fields

}

并将其包含在映射中

class Person {

   @????
   MyDate birthdate;

}

我试过Embeddable / Embedded但我收到此错误消息

[junit] 7109  venses  WARN   [main] openjpa.MetaData - "birhtdate" declares a null indicator column ""birthdate_null"" whose JDBC type is not compatible with the expected type "integer".

2 个答案:

答案 0 :(得分:0)

Stringfinal; Date不是。你无法扩展前者;你可以扩展后者,但我不建议这样做。

继承表明您的新类的行为与其父类不同。我真诚地怀疑你在MyDate中有一个有意义的区别。我认为“很多逻辑”都是错误的。例如,如果您认为新课程会改善java.util.Date对众所周知的问题,我建议您尝试使用JODA。使用图书馆;不要重新发明。我确信你的“大量逻辑”对你如何表示Date或将其存储在SQL数据库中没有任何影响。

你应该重新考虑你原来的意图。

答案 1 :(得分:0)

是的,可以按如下方式定义MyDate类型:

public class MyDate extends java.util.Date {
}

并将其用作实体中的持久属性:

@Entity
public class SomeEntity {
    @Id private int id;

    MyDate date
}

这是有效的,因为它是Serializable类型,因此它默认被视为简单类型并持久保存到数据库。无需额外注释。但是你不能对String做同样的事情,因为你无法扩展最终的类。