Java 在添加额外的getter和setter后从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.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获取或设置列表而不是字符串。 以下是一些代码: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
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()