gpt4 book ai didi

java - 添加额外的 getter 和 setter 后出现 JPA 异常

转载 作者:太空宇宙 更新时间:2023-11-04 13:07:07 27 4
gpt4 key购买 nike

我有一个工作正常的 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

I surely have the named query defined in the entity BedOccupation, so I guess this is just because of getter and setter which gets or sets List instead of String.Here are some codes:

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();
}

我是否需要添加一些注释或执行其他操作,以添加与字段无关的 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]));
};
}

我想要在这个方法中做的是根据每个第一个值的第二个值对用“_”分隔的数字进行排序。

当我如下更改这些代码时,不会发生错误:

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.");
}
};
}

我需要搜索更多相关信息,但这会是一个错误吗?不管怎样,谢谢你的帮助,我会尝试自己解决这个问题。

关于java - 添加额外的 getter 和 setter 后出现 JPA 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34324912/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com