Joda Time没有LocalTimes之间的间隔概念,所以我做了一个:
public final class LocalInterval
{
private LocalTime start;
private LocalTime end;
..
当然我也支持Hibernate,将本地时间存储为两个属性,“start”和“end”:
public class PersistentLocalIntervalAsTime implements CompositeUserType, Serializable
{
public String[] getPropertyNames() {return new String[]{"start", "end"};}
...
在我的package-info.java类中,我映射了“LocalInterval”:
@TypeDef(
name = "LocalInterval",
typeClass = PersistentLocalIntervalAsTime.class
),
所以现在我只想在MyClass中有一个LocalInterval列表:
@CollectionOfElements(targetElement=LocalInterval.class)
List<LocalInterval> intervals;
Hibernate不喜欢这样,并说它无法弄清楚这种类型。所以我试过了:
@CollectionOfElements(targetElement=LocalInterval.class)
@Type(type="LocalInterval")
List<LocalInterval> intervals;
至少生成了一个模式,但架构有:
create table myclass_intervals (
element time,
myclass varchar(40) not null
) ENGINE=InnoDb;
看起来不对 - 我不应该有两个TIME列,“start”和“end”,而不是一个TIME列“element”?
答案 0 :(得分:0)
显然你必须向Hibernate明确指出应该使用多个列:
@CollectionOfElements(targetElement=LocalInterval.class)
@Type(type="LocalInterval")
@Columns(columns={@Column(name="start"), @Column(name="end")})
List<LocalInterval> intervals;
我不知道为什么Hibernate不会通过查询PersistentLocalIntervalAsTime来自动解决这个问题---或者至少抛出错误而不是创建默认的单列。