Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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
由于附加的方便方法,JPA和JavaSE表不是为实体类创建的_Java_Jpa_Eclipselink - Fatal编程技术网

由于附加的方便方法,JPA和JavaSE表不是为实体类创建的

由于附加的方便方法,JPA和JavaSE表不是为实体类创建的,java,jpa,eclipselink,Java,Jpa,Eclipselink,我目前正在编写一个用于持久性的Netbeans平台应用程序,我使用JPA2.1和eclipse链接作为提供程序。我有以下实体类: import java.util.UUID; import javafx.beans.property.SimpleStringProperty; import javax.persistence.Access; import javax.persistence.AccessType; import javax.persistence.Entity; import j

我目前正在编写一个用于持久性的Netbeans平台应用程序,我使用JPA2.1和eclipse链接作为提供程序。我有以下实体类:

import java.util.UUID;
import javafx.beans.property.SimpleStringProperty;
import javax.persistence.Access;
import javax.persistence.AccessType;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Transient;

/**
 *
 * @author forell
 */
@Entity
@Access(AccessType.FIELD)
public class MaterialAbc {
    @Id
    private String id;

//... several additional fields, that all work fine


    private String substanceInstances = "";


    public MaterialAbc(){
        id = UUID.randomUUID().toString();
    }

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }


//.. getters and setters for the omitted fields        
    public String getSubstanceInstances() {
        return substanceInstances;
    }

    public void setSubstanceInstances(String substanceInstances) {
        this.substanceInstances = substanceInstances;
    }

    /*  IF I UNCOMMENT THESE LINES THE DATATABLE IS NOT CREATED ANYMORE
        IS THERE A WAY TO SOLVE THIS?

    public List<SubstanceInstance2> getSubs() {
        List<SubstanceInstance2> subs = new ArrayList<>();

        if (!"".equals(substanceInstances)){

            List<String> values = Arrays.asList(substanceInstances.split("|"));
            values.forEach(value->{
                subs.add(SubstanceInstance2.unSerialize(value));
            });

        }
        return subs;
    }
    public void setSubs(List<SubstanceInstance2> subs) {
        substanceInstances = "";
        subs.forEach(sub->{
            substanceInstances =substanceInstances + sub.serialize() + "|";
        });
        substanceInstances = substanceInstances.substring(0, substanceInstances.length()-1);
    }
*/
import java.util.UUID;
导入javafx.beans.property.SimpleStringProperty;
导入javax.persistence.Access;
导入javax.persistence.AccessType;
导入javax.persistence.Entity;
导入javax.persistence.Id;
导入javax.persistence.manytone;
导入javax.persistence.Transient;
/**
*
*@作者弗雷尔
*/
@实体
@访问权限(AccessType.FIELD)
公共类材料{
@身份证
私有字符串id;
//…几个附加字段,所有这些字段都可以正常工作
私有字符串substanceInstances=“”;
公共材料{
id=UUID.randomuid().toString();
}
公共字符串getId(){
返回id;
}
公共无效集合id(字符串id){
this.id=id;
}
//..省略字段的getter和setter
公共字符串getSubstanceInstances(){
返回实体指令;
}
public void setSubstanceInstances(字符串substanceInstances){
this.substanceInstances=substanceInstances;
}
/*如果我取消对这些行的注释,则不再创建DATATABLE
有办法解决这个问题吗?
公共列表getSubs(){
List subs=new ArrayList();
如果(!“”.equals(实体状态)){
列表值=Arrays.asList(substanceInstances.split(“|”);
值。forEach(值->{
子项添加(实体安装2.未序列化(值));
});
}
返回潜艇;
}
公共无效集合子集合(列表子集合){
实体状态=”;
subs.forEach(sub->{
substanceInstances=substanceInstances+sub.serialize()+“|”;
});
substanceInstances=substanceInstances.substring(0,substanceInstances.length()-1);
}
*/

只要我取消底部两个“unserialize”方法的注释,该类就可以正常工作作为嵌套在字符串substanceInstances中的对象,eclipselink不再创建数据表。是否有办法解决此问题,或者确实需要添加一个额外的层。

与此同时,我实际找到了解决此问题的方法。如果在中使用lambda表达式,eclipselink似乎不会将实体bean转换为表方法。最后我转换了

values.forEach(value->{
    subs.add(SubstanceInstance2.unSerialize(value));
});
进入


一切都很好。至于原因,不知道!

编辑的异常堆栈的值很低,我将完整的堆栈跟踪放进去了。然后你遇到了类加载器问题,找到了一个过时的jar或类目录。这很好,但我如何检查/纠正这一点,我已经清理并重建了几个组件我使用的是Netbeans 8.1,而不是Maven。我发现了这个问题,它与类加载器无关,这是因为我的实体Bean中有其他方法。我将编辑这个问题
for (String value:values){
    subs.add(SubstanceInstance2.unSerialize(value));
}