我有一个实现java.util.Collection的类,并且也标注为@Entity。我如何以Entity
而不是Collection
的形式持久化该类。
我正在尝试使用EntityManager.persist(Object entity)
,但这会引发spring数据声明异常:
org.springframework.data.mapping.MappingException:找不到类型java.lang.Object的PersistentEntity!
这在使用spring-boot 2.0.7.RELEASE时曾经有效,但是我试图升级到spring-boot 2.1.1.RELEASE(使用spring-data-jpa:2.1.3.RELEASE)。 / p>
据我所知,现在有一个“新” PersistentPropertyPathFactory
,它使用“ actualType”来确定需要保留的实体类型。但是,我的实体的“ actualType”最终只是java.lang.Object
,因为它是isCollectionLike
(即我的类型是Collection,所以它满足Collection.class.isAssignableFrom(rawType)
检查)。
我真正想要的是让我的实体作为自己的类型持久化,而不是让EntityManager尝试将其持久化为集合。
有人知道如何执行此操作吗?还是有一些文档说明实体不应该是集合?
这是Entity / Collection类的简化示例:
@Entity
public class ContainerCollection<C extends Container> extends Container implements Collection<C> {
@JoinTable(
name = "mod_container_collections",
joinColumns = @JoinColumn(name = "container_collection_id"),
inverseJoinColumns = @JoinColumn(name = "container_id"))
protected Set<C> containers = new HashSet<>();
@Override
public int size() {
return containers.size();
}
@Override
public boolean isEmpty() {
return containers.isEmpty();
}
// other Collection methods implemented to delegate to containers
// with some relationship management in add(Object) and remove(Object)
}
这是一个非常简单的测试,演示了我想做的事情:
public class PersistenceTest {
@PersistenceContext
private EntityManager em;
public void testPersist() {
ContainerCollection<> collection = new ContainerCollection<>();
em.persist(collection); // this line throws MappingException
}
}