0

我有以下 POJO:

class Month {
    long id;
    String description;
    List<Day> days; // always contains 29, 30 or 31 elements
}

class Day {
    byte nr; // possible values are 1-31
    String info;
}

有没有办法使用 JPA+Hibernate 将这些对象存储到以下数据库结构中:

表月份:

ID;描述;

表天数:

月 id;nr-of-day;信息;

这种情况有更好的解决方案吗?

4

3 回答 3

1

如果你不能改变你的 pojo 或表格结构,那你就有点搞砸了。如果可以的话,一个简单的带注释的 pojo 就可以了。

class Month {
   @Id
   private long id;
   private String description;
   @OneToMany(mappedBy="month",fetchType=Lazy)
   private List<Day> days;

}

---- Days 表的代理键所需的数据库更改

class Day {
    @Id
    private int id;
    private Month month;
    private byte nr; // possible values are 1-31
    private String info;
}
于 2009-02-02T20:03:26.907 回答
0

您可以将 Month @Entity 类 UNIDIRECTIONAL 关系与 Day @Entity 类映射,而不用使用 CascadeType.PERSIST 的 @Embeddable,其中 @Entity Day 类的标识符由 Month 标识符和列表索引组成,如下所示?

@Entity 公共类月 {

@Id
@GeneratedValue
private Integer id;


// one way relationship
@OneToMany(cascade=CascadeType.PERSIST)
@JoinColumn(name="MONTH_ID")
@IndexColumn(name="childIndex")
private List<Day> dayList = new ArrayList<Day>();

}

@Entity 公共课日{

@EmbeddedId // composed by month foreign key and index column
private DayId id;

}

我希望你能解决这个问题

问候 Arthur Ronald FD Garcia(Java 程序员) Natal/Rn - 巴西

于 2009-06-22T06:44:11.857 回答
0

这是我找到的一个解决方案:

class Month {
    long id;
    String description;

    @CollectionOfElements(fetch = FetchType.EAGER)
    @IndexColumn(name = "nr-of-day")
    List<Day> days; // always contains 29, 30 or 31 elements
}

@Embeddable
class Day {
    byte nr; // possible values are 1-31
    String info;
}

@CollectionOfelements 和 @IndexColumn 是 Hibernate 注释。如果我使用 JPA 中可用的 @OneToMany 注释,hibernate 会创建 3 个表而不是 2 个。

我现在唯一的问题是 Day.nr 被保存了两次:第一次作为 List 的 IndexColumn(基于 0 的计数器),第二次作为 Day 类的字段(基于 1 的计数器)。

于 2008-12-04T09:28:18.673 回答