我在使用JPA持久化以下构造时遇到问题。
@MappedSuperclass
public abstract class SuperFoo {
@Embedded
private Bar bar;
public SuperFoo() {}
public SuperFoo(...) {
...
this.bar = new Bar("barKey");
}
...
public void setBar(Bar bar) {
this.bar = bar;
}
public Bar getBar() {
return bar;
}
}
@Embeddable
public class Bar {
@ElementCollection
Map<String, Long> durations;
@ElementCollection
Map<String, Integer> integers;
public Bar() {}
public Bar(String barKey) {
his.durations = new HashMap<String, Long>();
this.integers = new HashMap<String, Integer>();
durations.put(key, new Long(15));
integers.put(key, new Integer(10));
}
... setters and getters.....
}
@Entity
public class Foo extends SuperFoo {
@Id
private String id;
public Foo() {}
public Foo(String id, *superArguments*) {
super(*superArguments*);
this.id = id;
}
public String getId() { return id; }
public void setId(String id) {
this.id = id;
}
}
@Entity
public class FooContainer {
@Id
String id;
@OneToMany(cascade = CascadeType.ALL)
List<Foo> fooList;
public FooContainer() {}
public FooContainer(String id) {
this.id = id;
this.fooList = new ArrayList<>();
}
public void addFoo(Foo foo) {
this.fooList.add(foo);
}
public void setFooList(List<Foo> fooList) {this.fooList = fooList;}
public List<Foo> getFooList() { return fooList; }
}
持续发生的方法:
public void method() {
FooContainer fooContainer = fooContainerRepository.getOne(...);
fooContainer.addFoo(new Foo(...));
fooContainerRepository.save(fooContainer);
}
JPA创建以下表格(看起来很好):
现在,当我保存一个Foo实例时,一切都会被持久化(Foo中的字段)。 但是我没有在foo_durations和foo_integers中输入任何条目。此外,我没有例外。
我自己做了一点研究,发现了以下内容:
&#34;元素集合中包含的可嵌入类不得包含元素集合。&#34;
我想,在这里,情况并非如此,因为我的可嵌入课程&#34; Bar&#34;不包含在元素集合中。所以有人知道,我可能做错了什么? 提前谢谢!
更新
我忘了提到SuperFoo中的Bar对象不是通过构造函数设置的,而是在构造函数中计算的。