Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate和JPA:无法通过反射getter获取字段值_Java_Hibernate_Annotations - Fatal编程技术网

Java Hibernate和JPA:无法通过反射getter获取字段值

Java Hibernate和JPA:无法通过反射getter获取字段值,java,hibernate,annotations,Java,Hibernate,Annotations,我正在使用Hibernate和JPA(我升级到了最新的Hibernate版本4.2.2),我遇到了一个奇怪的错误。“无法通过反射getter获取字段值…” 我正在使用JPA、Hibernate和继承 我的密码 AbstractGraphPropertyContainer.java @Entity @Inheritance(strategy=InheritanceType.JOINED) @DiscriminatorColumn(name="containertype", discriminato

我正在使用Hibernate和JPA(我升级到了最新的Hibernate版本4.2.2),我遇到了一个奇怪的错误。“无法通过反射getter获取字段值…”

我正在使用JPA、Hibernate和继承

我的密码

AbstractGraphPropertyContainer.java

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="containertype", discriminatorType=DiscriminatorType.STRING)
@Table(name="graphcontainers")
public abstract class AbstractGraphPropertyContainer implements DataObject  {


public AbstractGraphPropertyContainer(){    

}   

public AbstractGraphPropertyContainer(long id){ 
    this.id = id;
}

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="containerid")
long id;

@Column(name = "searchable")
public boolean searchable = true;

@Transient
Map<String, String> properties = new Hashtable<String, String>();

@Transient
private boolean retrieved = false;

static PortalFactory factory = SQLGraphManager.factory;

public long getID(){
    Hibernate.initialize(this);
    return this.id;
}


public void delete(){

    Session session = null;

    try {

        SessionFactory sFactory = SQLGraphManager.fac;
        session = sFactory.getCurrentSession();
        Transaction tr = session.beginTransaction();

        //Save this object
        session.delete(this);

        tr.commit();

    }catch(HibernateException he){
        throw new RuntimeException(he);
    }

}

public void save(){

    if(this.id > 0){
        this.update();
        return;
    }

    Session session = null;

    try {


        SessionFactory sFactory = SQLGraphManager.fac;
        session = sFactory.getCurrentSession();
        Transaction tr = session.beginTransaction();

        //Save this object
        session.save(this);

        tr.commit();


    }catch(HibernateException he){


        throw new RuntimeException(he);
    }

}

public void update(){


    Session session = null;

    try {
        SessionFactory sFactory = SQLGraphManager.fac;
        session = sFactory.getCurrentSession();
        Transaction tr = session.beginTransaction();

        //Save this object
        session.update(this);

        tr.commit();



    }catch(HibernateException he){

        throw new RuntimeException(he);           
    }       

}
}
我已经查看了StackOverFlow和其他来源,了解了这个错误的原因。但是没有运气。保存SQLGraphObject时出错。显然,它认为我在保存时试图将SQLGraphObject对象分配给Set属性

有趣的是,从同一个超类扩展而来的SQLGraph可以毫无问题地保存

我假设SQLGraphObject中有什么东西导致它出错,但我看不出它和SQLGraph之间有什么不同


更新:删除SQLGraphObject中的集合映射时,我得到了与字符串A原语字段相同的错误。当删除所有字段映射时,我在超类AbstractGraphPropertyContainer.java中得到了关于id和可搜索字段的相同错误。保存SQLGraph不会给我带来任何问题。

你能发布
SQLGraphAction
的源代码吗?我用SQLGraphAction更新了源代码,但我认为这不是问题所在。调试时,我删除了SQLGraphObject中的大多数映射,但是即使保存原语和字符串值也会导致相同的错误。
@Entity
@Table(name="graphs")
@PrimaryKeyJoinColumn(name="graphid")
@DiscriminatorValue("GRAPH")
public class SQLGraph extends AbstractGraphPropertyContainer implements Graph {


@Column(name="graph_name")
String name;

@Column(name="graph_description")
String description;

@Column(name="schemalocked")
boolean schemaLocked;

@Column(name="detached")
boolean detached;

@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name="graphs_schemas", 
        joinColumns={@JoinColumn(name="graphid")}, 
        inverseJoinColumns={@JoinColumn(name="schemaid")})
private Set<SQLGraphSchema> schemas = new TreeSet<SQLGraphSchema>();

@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name="graphs_objects", 
        joinColumns={@JoinColumn(name="graphid")}, 
        inverseJoinColumns={@JoinColumn(name="objectid")})  
private Set<SQLGraphObject> objects = new TreeSet<SQLGraphObject>();

@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name="graphs_relationships", 
        joinColumns={@JoinColumn(name="graphid")}, 
        inverseJoinColumns={@JoinColumn(name="relationshipid")})    
private Set<SQLGraphRelationship> relationships = new TreeSet<SQLGraphRelationship>();


}
@Entity
@Table(name="zeusportalgraphactions_typemap") 
@PrimaryKeyJoinColumn(name="actionid")
@DiscriminatorValue("ACTION")
public class SQLGraphAction extends SQLGraphRelation<Member, GraphObject> implements
    GraphAction {



@ManyToOne
@JoinColumn(name="endobjectid") 
SQLGraphObject endObject;

@ManyToOne
@JoinColumn(name="typeid")
SQLGraphActionType type;            
@Entity
@Table(name="graphobjects") 
@PrimaryKeyJoinColumn(name="objectid")
@DiscriminatorValue("OBJECT")
public class SQLGraphObject extends AbstractGraphPropertyContainer implements
    GraphObject {


@Column(name="label")
String label;

@ManyToOne
@JoinColumn(name="typeid")
SQLGraphObjectType type;

@OneToMany(mappedBy="startObject")
private Set<SQLGraphRelationship> relationships = new TreeSet<SQLGraphRelationship>();

@OneToMany(mappedBy="endObject")
private Set<SQLGraphRelationship> incRelationships =  new TreeSet<SQLGraphRelationship>();

@OneToMany(mappedBy="endObject")
private Set<SQLGraphAction> actions = new TreeSet<SQLGraphAction>();
Caused by: java.lang.RuntimeException: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.enetexperience.zeusportal.sql.graph.SQLGraphObject.actions
                                                        at com.enetexperience.zeusportal.sql.graph.AbstractGraphPropertyContainer.save(AbstractGraphPropertyContainer.java:269)
                                                        at com.enetexperience.zeusportal.sql.graph.SQLGraphManager.createObject(SQLGraphManager.java:306)
                                                        at com.enetexperience.zeusportal.graph.GraphManagerProxy.createObject(GraphManagerProxy.java:191)
                                                        at com.enetexperience.zeusportal.graph.GraphManagerProxy.getObject(GraphManagerProxy.java:330)
                                                        at com.enetexperience.zeusportal.graph.GraphSearchManager.addToIndex(GraphSearchManager.java:181)
                                                        at com.enetexperience.zeusportal.graph.GraphSearchManager.updateIndex(GraphSearchManager.java:455)
                                                        ... 3 more
                                                      Caused by: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.enetexperience.zeusportal.sql.graph.SQLGraphObject.actions
                                                        at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:62)
                                                        at org.hibernate.tuple.entity.AbstractEntityTuplizer.getPropertyValue(AbstractEntityTuplizer.java:630)
                                                        at org.hibernate.persister.entity.AbstractEntityPersister.getPropertyValue(AbstractEntityPersister.java:4522)
                                                        at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:166)
                                                        at org.hibernate.event.internal.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:424)
                                                        at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:263)
                                                        at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:192)
                                                        at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)
                                                        at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:206)
                                                        at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
                                                        at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:191)
                                                        at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
                                                        at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
                                                        at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:764)
                                                        at org.hibernate.internal.SessionImpl.save(SessionImpl.java:756)
                                                        at org.hibernate.internal.SessionImpl.save(SessionImpl.java:752)
                                                        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                                                        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
                                                        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                                                        at java.lang.reflect.Method.invoke(Method.java:616)
                                                        at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:352)
                                                        at sun.proxy.$Proxy80.save(Unknown Source)
                                                        at com.enetexperience.zeusportal.sql.graph.AbstractGraphPropertyContainer.save(AbstractGraphPropertyContainer.java:261)
                                                        ... 8 more
                                                      Caused by: java.lang.IllegalArgumentException: Can not set java.util.Set field com.enetexperience.zeusportal.sql.graph.SQLGraphObject.actions to com.enetexperience.zeusportal.sql.graph.SQLGraphObject
                                                        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164)
                                                        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168)
                                                        at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:55)
                                                        at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36)
                                                        at java.lang.reflect.Field.get(Field.java:376)
                                                        at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:59)
                                                        ... 30 more