0

我正在为 Neo4j 的 Hibernate OGM 实现做 POC。为此,我创建了以下对象:

@Entity
public class AutoDealership {


private String name;

public AutoDealership(String nam){
    this.name = nam;
}
@Id
public String getName(){
    return name;
}

private void setName(String n){
    name = n;
}

private List<Vehicle> vehicle = new ArrayList<Vehicle>();

@OneToMany(mappedBy="autoDealership")
public List<Vehicle> getVehicle(){
    return vehicle;
}

private void setVehicles(List<Vehicle> v){
    this.vehicle = v;
}

}

还有一个车辆类:

public abstract class Vehicle {

protected AutoDealership autoDealership;
abstract int getValue();

@ManyToOne
public abstract AutoDealership getAutoDealership();

private void setValue(int v){

}
}

它被扩展到具有简单实现的类。我按如下方式运行此代码:

        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        OgmSession session =em.unwrap(OgmSession.class);
        Camry camry1 = new Camry("Joe");
        Camry camry2 = new Camry("Elvis");
        Silverado s = new Silverado("TX");
        Maserati mas = new Maserati();
        mas.setStatus("Massive");
        session.saveOrUpdate(camry1);
        session.saveOrUpdate(camry2);
        session.saveOrUpdate(s);
        session.saveOrUpdate(mas);
        AutoDealership a = new AutoDealership("Slick Willie's");
        session.saveOrUpdate(a);
        camry1.setAutoDealership(a);
        camry2.setAutoDealership(a);
        mas.setAutoDealership(a);
        s.setAutoDealership(a);
        tx.commit();
        em.close();
        emf.close();

当我运行它时,它失败了:

Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: ogm-neo4j] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1239)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.access$600(EntityManagerFactoryBuilderImpl.java:120)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:855)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:845)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:844)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:75)
at org.hibernate.ogm.jpa.HibernateOgmPersistence.createEntityManagerFactory(HibernateOgmPersistence.java:62)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
at dogs.TestClass.main(TestClass.java:22)
Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: cars.AutoDealership.vehicle[cars.Vehicle]
at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1134)
at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:793)
at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:728)
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:70)
at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1697)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1426)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846)

如果我注释掉与从 AutoDealership 获取车辆相关的任何内容,代码将编译并运行,并成功地将节点插入数据库。我试图将 mappedBy 目标更改为无济于事。

4

1 回答 1

1

事实证明,问题在于我必须将 Vehicle 声明为实体。

于 2015-02-17T21:50:47.113 回答