Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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/0/jpa/2.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 在添加额外的getter和setter后从JPA获得异常_Java_Jpa - Fatal编程技术网

Java 在添加额外的getter和setter后从JPA获得异常

Java 在添加额外的getter和setter后从JPA获得异常,java,jpa,Java,Jpa,我有一个正常工作的jpa实体,但在我添加了新的getter和setter之后,它返回异常,如下所示: Caused by: java.lang.IllegalArgumentException: NamedQuery of name: BedOccupation.findByDateofstay not found. at org.eclipse.persistence.internal.jpa.QueryImpl.getDatabaseQueryInternal(QueryImpl.j

我有一个正常工作的jpa实体,但在我添加了新的getter和setter之后,它返回异常,如下所示:

Caused by: java.lang.IllegalArgumentException: NamedQuery of name: BedOccupation.findByDateofstay not found. at org.eclipse.persistence.internal.jpa.QueryImpl.getDatabaseQueryInternal(QueryImpl.java:351) at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createNamedQuery(EntityManagerImpl.java:1124) at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createNamedQuery(EntityManagerImpl.java:1144) at tcyh.BedOccupationModel.fetchBO(BedOccupationModel.java:42) at tcyh.BedOccupationModel.fetchBO(BedOccupationModel.java:48) at tcyh.MainWindowController.selectTab(MainWindowController.java:382) at tcyh.MainWindowController.initialize(MainWindowController.java:184) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548) ... 14 more 原因:java.lang.IllegalArgumentException:NamedName的查询:BedOccupation.findByDateofstay未找到。 位于org.eclipse.persistence.internal.jpa.QueryImpl.getDatabaseQueryInternal(QueryImpl.java:351) 位于org.eclipse.persistence.internal.jpa.EntityManagerImpl.createNamedQuery(EntityManagerImpl.java:1124) 位于org.eclipse.persistence.internal.jpa.EntityManagerImpl.createNamedQuery(EntityManagerImpl.java:1144) 在tcyh.bedcocationmodel.fetchBO(bedcocationmodel.java:42) 在tcyh.bedcocationmodel.fetchBO(bedcocationmodel.java:48) 在tcyh.MainWindowController.selectTab(MainWindowController.java:382) 在tcyh.MainWindowController.initialize(MainWindowController.java:184) 在javafx.fxml.fxmloader.loadImpl(fxmloader.java:2548) ... 14多 我肯定在实体bedcocculation中定义了命名查询,所以我想这只是因为getter和setter获取或设置列表而不是字符串。 以下是一些代码:

BedOccupation fetchBO(Date date) {
    EntityManager em = ConnectTCYHPU.getInstance().getEM();
    TypedQuery tquery = em.createNamedQuery("BedOccupation.findByDateofstay", BedOccupation.class);
    tquery.setParameter("dateofstay", date);
    return (BedOccupation) tquery.setHint(QueryHints.REFRESH, HintValues.TRUE).getSingleResult();
}

....

@Entity
@Table(name = "BEDOCCUPATION")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "BedOccupation.findByDateofstay", query = "SELECT r FROM BedOccupation r WHERE r.dateofstay = :dateofstay"),

....

public class BedOccupation implements Serializable, Cloneable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "DATEOFSTAY")
    @Temporal(TemporalType.DATE)
    private Date dateofstay;
    @Basic(optional = false)
    @Column(name = "MDORM")
    private String mdorm;

....

//These are getter/setter generated by NetBeans
public String getMDorm() {
    return mdorm;
}
public void setMDorm(String mdorm) {
    this.mdorm = mdorm;
}

//These are getter/setter I added.
public List<String> getMDormList() {
    return CSVToList(mdorm);
}
public void setMDormList(List<String> mdormList) {
    this.mdorm = listToCSV(mdormList);
}

....

private List<String> CSVToList(String str) {
    List list = new ArrayList<>();
    list.addAll(Arrays.asList(str.split(",", -1)));
    return list;
}

private String listToCSV(List list) {
    StringBuilder strb = new StringBuilder();
    for (int i = 0; i < list.size(); i++) {
        strb.append(list.get(i));
        if (i < list.size() - 1) {
            strb.append(",");
        }
    }
    return strb.toString();
}
bedbo(日期){
EntityManager em=ConnectTCYHPU.getInstance().getEM();
TypedQuery tquery=em.createNamedQuery(“bedcocations.findByDateofstay”,bedcocations.class);
setParameter(“dateofstay”,日期);
return(bedcocculation)tquery.setHint(QueryHints.REFRESH,HintValues.TRUE);
}
....
@实体
@表(name=“BEDOCCUPATION”)
@XmlRootElement
@命名查询({
@NamedQuery(name=“BedOccupation.findByDateofstay”,query=“从BedOccupation r中选择r,其中r.dateofstay=:dateofstay”),
....
公共类实现了可序列化、可克隆{
私有静态最终长serialVersionUID=1L;
@身份证
@基本(可选=假)
@列(name=“DATEOFSTAY”)
@时态(TemporalType.DATE)
私人日期;
@基本(可选=假)
@列(name=“MDORM”)
私有字符串形式;
....
//这些是由NetBeans生成的getter/setter
公共字符串getMDorm(){
返回mdorm;
}
公共void setMDorm(字符串mdorm){
this.mdorm=mdorm;
}
//这些是我添加的getter/setter。
公共列表getMDormList(){
返回CSVToList(mdorm);
}
公共无效集合mdormList(列表mdormList){
this.mdorm=listToCSV(mdormList);
}
....
私有列表CSVToList(字符串str){
列表=新的ArrayList();
addAll(Arrays.asList(str.split(“,”,-1));
退货清单;
}
私有字符串listToCSV(列表){
StringBuilder strb=新的StringBuilder();
对于(int i=0;i

我是否需要添加一些注释或其他操作,以添加与字段不关联的setter/getter?

我发现第一篇文章中的错误是由实体类BedOccupation中定义的这些方法引起的:

static Comparator<String> compare(){
    return (String a, String b) -> {
        if (a.equals("")) {
            return b.equals("") ? 0 : 1;
        } else if (b.equals("")) {
            return -1;
        } else {
            return a.compareTo(b);
        }
    };
}

static Comparator<String> compareOrderDesc(){
    return (String aStr,String bStr) -> {
        if(aStr.equals("")) return 1;
        else if (bStr.equals("")) return -1;
        String[] a = aStr.split("_");
        String[] b = bStr.split("_");
        if (a[0].equals(b[0]) && a.length >= 2 && b.length >= 2){
            return - Integer.decode(a[1])
                    .compareTo(Integer.decode(b[1]));
        }
        return Integer.decode(a[0])
                .compareTo(Integer.decode(b[0]));
    };
}
静态比较器比较(){
返回(字符串a、字符串b)->{
如果(a)等于(“”){
返回b.equals(“”)0:1;
}else if(b等于(“”){
返回-1;
}否则{
返回a.compareTo(b);
}
};
}
静态比较器CompareOrderEsc(){
返回(字符串aStr、字符串bStr)->{
如果(aStr.equals)(“”)返回1;
else if(bStr.equals(“”)返回-1;
字符串[]a=aStr.split(“”);
字符串[]b=bStr.split(“”);
如果(a[0]。等于(b[0])&&a.length>=2&&b.length>=2){
return-Integer.decode(a[1])
.compareTo(Integer.decode(b[1]));
}
返回整数。解码(a[0])
.compareTo(Integer.decode(b[0]);
};
}
在这个方法中,我要做的是根据每个第一个值的第二个值,对由“u”分隔的数字进行排序

当我按以下方式更改这些代码时,不会发生错误:

static Comparator<String> compare(){
    return new Comparator() {
        @Override
        public int compare(Object o1, Object o2) {
            throw new UnsupportedOperationException("Not supported yet.");
        }
    };
}

static Comparator<String> compareOrderDesc(){
    return new Comparator() {
        @Override
        public int compare(Object o1, Object o2) {
            throw new UnsupportedOperationException("Not supported yet.");
        }
    };
}
静态比较器比较(){
返回新的比较器(){
@凌驾
公共整数比较(对象o1、对象o2){
抛出新的UnsupportedOperationException(“尚未支持”);
}
};
}
静态比较器CompareOrderEsc(){
返回新的比较器(){
@凌驾
公共整数比较(对象o1、对象o2){
抛出新的UnsupportedOperationException(“尚未支持”);
}
};
}
我需要搜索更多关于它的信息,但它会是一个bug吗?
无论如何,感谢您的帮助,我将尝试自己解决问题。

我发现我的第一篇文章中的错误是由实体类BedOccupation中定义的以下方法引起的:

static Comparator<String> compare(){
    return (String a, String b) -> {
        if (a.equals("")) {
            return b.equals("") ? 0 : 1;
        } else if (b.equals("")) {
            return -1;
        } else {
            return a.compareTo(b);
        }
    };
}

static Comparator<String> compareOrderDesc(){
    return (String aStr,String bStr) -> {
        if(aStr.equals("")) return 1;
        else if (bStr.equals("")) return -1;
        String[] a = aStr.split("_");
        String[] b = bStr.split("_");
        if (a[0].equals(b[0]) && a.length >= 2 && b.length >= 2){
            return - Integer.decode(a[1])
                    .compareTo(Integer.decode(b[1]));
        }
        return Integer.decode(a[0])
                .compareTo(Integer.decode(b[0]));
    };
}
静态比较器比较(){
返回(字符串a、字符串b)->{
如果(a)等于(“”){
返回b.equals(“”)0:1;
}else if(b等于(“”){
返回-1;
}否则{
返回a.compareTo(b);
}
};
}
静态比较器CompareOrderEsc(){
返回(字符串aStr、字符串bStr)->{
如果(aStr.equals)(“”)返回1;
else if(bStr.equals(“”)返回-1;
字符串[]a=aStr.split(“”);
字符串[]b=bStr.split(“”);
如果(a[0]。等于(b[0])&&a.length>=2&&b.length>=2){
return-Integer.decode(a[1])
.compareTo(Integer.decode(b[1]));
}
返回整数。解码(a[0])
.compareTo(Integer.decode(b[0]);
};
}
在这个方法中,我要做的是根据每个第一个值的第二个值,对由“u”分隔的数字进行排序

当我按以下方式更改这些代码时,不会发生错误:

static Comparator<String> compare(){
    return new Comparator() {
        @Override
        public int compare(Object o1, Object o2) {
            throw new UnsupportedOperationException("Not supported yet.");
        }
    };
}

static Comparator<String> compareOrderDesc(){
    return new Comparator() {
        @Override
        public int compare(Object o1, Object o2) {
            throw new UnsupportedOperationException("Not supported yet.");
        }
    };
}
静态比较器比较(){
返回新的比较器(){
@凌驾
公共整数比较(对象o1、对象o2){
抛出新的UnsupportedOperationException(“尚未支持”);
}
};
}
静态比较器CompareOrderEsc()