我有以下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将这些对象存储到以下DB结构中:
表月:
id;description;
表日:
id-of-month;nr-of-day;info;
针对这种情况有更好的解决方案吗?
答案 0 :(得分:1)
如果你不能改变你的pojo或桌面结构,你就有点搞砸了。如果可以的话,一个简单的注释pojo将起作用。
class Month {
@Id
private long id;
private String description;
@OneToMany(mappedBy="month",fetchType=Lazy)
private List<Day> days;
}
----代理键需要对Days表进行DB更改
class Day {
@Id
private int id;
private Month month;
private byte nr; // possible values are 1-31
private String info;
}
答案 1 :(得分: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的计数器),第二次是class Day的字段(基于1的计数器)。
答案 2 :(得分:0)
你能否将一个月@Entity类UNIDIRECTIONAL关系与没有@Embeddable的Day @Entity类映射到CascadeType.PERSIST,其中@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 F D Garcia(Java程序员) 纳塔尔/ Rn - 巴西