【问题标题】:JPA - Extending java String,DateJPA - 扩展 java 字符串、日期
【发布时间】:2012-08-13 22:39:13
【问题描述】:

是否可以声明类型

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

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

}

并将其包含在映射中

class Person {

   @????
   MyDate birthdate;

}

我尝试过嵌入/嵌入,但收到此错误消息

[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".

【问题讨论】:

  • 我认为你的问题的答案不会解决你的问题。
  • 我真的不明白这个问题。 "@????" 是什么意思什么意思?
  • 对我来说看起来像是一个半指定的注释占位符。

标签: java jpa


【解决方案1】:

StringfinalDate 不是。你不能扩展前者;你可以扩展后者,但我不建议这样做。

继承表明您的新类具有与其父类不同的行为。我真诚地怀疑您在MyDate 中是否存在有意义的差异。我敢打赌,“很多逻辑”是被误导的。例如,如果您认为您的新课程将改进 java.util.Date 的众所周知的问题,我建议您改用 JODA。使用图书馆;不要重新发明。我敢肯定,您的“大量逻辑”不会对您如何表示 Date 或将其存储在 SQL 数据库中产生任何影响。

你应该重新考虑你的初衷。

【讨论】:

    【解决方案2】:

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

    public class MyDate extends java.util.Date {
    }
    

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

    @Entity
    public class SomeEntity {
        @Id private int id;
    
        MyDate date
    }
    

    这是可行的,因为它是 Serializable 类型,因此默认情况下它被认为是简单类型并持久化到数据库中。不需要额外的注释。但是你不能对 String 做同样的事情,因为你不能扩展 final 类。

    【讨论】:

      猜你喜欢
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 1970-01-01
      • 2018-11-14
      • 2014-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多