Spring JPA存储库使用正确的属性名称失败,并且使用错误的名称工作

Spring JPA存储库使用正确的属性名称失败,并且使用错误的名称工作,spring,jpa,repository,Spring,Jpa,Repository,我有一个属性名为isChecked with is boolean type的类。在Jpa存储库中,我编写了一个方法来查找所有isChecked=false的行 public interface ReservationReminderRepository extends JpaRepository<ReservationReminder, Integer> { ReservationReminder findByReservationReminderId(Integer id);

我有一个属性名为isChecked with is boolean type的类。在Jpa存储库中,我编写了一个方法来查找所有isChecked=false的行

public interface ReservationReminderRepository extends JpaRepository<ReservationReminder, Integer> {
ReservationReminder findByReservationReminderId(Integer id);

//@Query("select r from ReservationReminder r where r.isChecked = :checked")
List<ReservationReminder> findByChecked(boolean checked);


}

问题似乎与该物业的命名有关

当您告诉Spring查找
findByChecked
时,属性名为
isChecked

您可以尝试使用
findByIsChecked
并将getter更改为
isChecked


但实际上,我会将属性更改为
checked
,将getter更改为
isChecked
,并保持jpa查询方法不变。

似乎问题与该属性的命名有关

当您告诉Spring查找
findByChecked
时,属性名为
isChecked

您可以尝试使用
findByIsChecked
并将getter更改为
isChecked


但实际上,我会将属性更改为
checked
,将getter更改为
isChecked
,并保留jpa查询方法的原样。

由于您的注释位于方法上,因此您的属性命名为
checked
,而不是
isChecked
。如果注释位于字段上,则将对其进行
isChecked
。因此,它的实际效果与JPA应该的一样。在方法上设置注释将打开
AccessType.PROPERTY
,而不是默认的
AccessType.FIELD
。您的意思是:
@Access(AccessType.FIELD)public class reservationrementer
您不能混合字段和属性访问。。。它是字段或属性,但不是两者都是。只需将注释移到字段而不是getter。对不起,我不明白您的意思。请粘贴一个egxmaple,使其看起来像您的注释位于属性上,而不是自动启用的字段
AccesType.PROPERTY
。。。如上所述,只需将注释移动到字段而不是属性(即getter/setter!)。由于注释位于方法上,因此您的属性被命名为
已选中,而不是
已选中。如果注释位于字段上,则将对其进行
isChecked
。因此,它的实际效果与JPA应该的一样。在方法上设置注释将打开
AccessType.PROPERTY
,而不是默认的
AccessType.FIELD
。您的意思是:
@Access(AccessType.FIELD)public class reservationrementer
您不能混合字段和属性访问。。。它是字段或属性,但不是两者都是。只需将注释移到字段而不是getter。对不起,我不明白您的意思。请粘贴一个egxmaple,使其看起来像您的注释位于属性上,而不是自动启用的字段
AccesType.PROPERTY
。。。如上所述,只需将注释移动到字段而不是属性(即getter/setter!)。
Caused by: java.lang.IllegalArgumentException: Unable to locate Attribute  with the the given name [isChecked] on this ManagedType [com.carwash.domains.ReservationReminder]
at org.hibernate.jpa.internal.metamodel.AbstractManagedType.checkNotNull(AbstractManagedType.java:128)
at org.hibernate.jpa.internal.metamodel.AbstractManagedType.getAttribute(AbstractManagedType.java:113)
at org.springframework.data.jpa.repository.query.QueryUtils.toExpressionRecursively(QueryUtils.java:566)
at org.springframework.data.jpa.repository.query.JpaQueryCreator$PredicateBuilder.getTypedPath(JpaQueryCreator.java:334)
at org.springframework.data.jpa.repository.query.JpaQueryCreator$PredicateBuilder.build(JpaQueryCreator.java:277)
at org.springframework.data.jpa.repository.query.JpaQueryCreator.toPredicate(JpaQueryCreator.java:182)
at org.springframework.data.jpa.repository.query.JpaQueryCreator.create(JpaQueryCreator.java:109)
at org.springframework.data.jpa.repository.query.JpaQueryCreator.create(JpaQueryCreator.java:49)
at org.springframework.data.repository.query.parser.AbstractQueryCreator.createCriteria(AbstractQueryCreator.java:109)
at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:88)
at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:73)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery$QueryPreparer.<init>(PartTreeJpaQuery.java:118)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery$CountQueryPreparer.<init>(PartTreeJpaQuery.java:241)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:68)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:103)
... 104 more
package com.carwash.domains;

import javax.persistence.*;
import java.util.Date;

/**
* Created by mbi on 01.03.2017.
*/
@Entity
public class ReservationReminder {
private int reservationReminderId;
private Reservation reservation;
private boolean isChecked;
private Date checkedDate;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public int getReservationReminderId() {
    return reservationReminderId;
}

public void setReservationReminderId(int reservationReminderId) {
    this.reservationReminderId = reservationReminderId;
}

@OneToOne(mappedBy = "reservationReminder")
public Reservation getReservation() {
    return reservation;
}

public void setReservation(Reservation reservation) {
    this.reservation = reservation;
}

public boolean getChecked() {
    return isChecked;
}

public void setChecked(Boolean checked) {
    isChecked = checked;
}

public Date getCheckedDate() {
    return checkedDate;
}

public void setCheckedDate(Date checkedDate) {
    this.checkedDate = checkedDate;
}

@Override
public String toString() {
    return "ReservationReminder{" +
            "reviewId=" + reservationReminderId +
            ", isChecked=" + isChecked +
            ", checkedDate=" + checkedDate +
            '}';
}

public ReservationReminder() {
}

public ReservationReminder(Boolean isChecked, Date checkedDate) {
    this.isChecked = isChecked;
    this.checkedDate = checkedDate;
}

public ReservationReminder(int reservationReminderId, Reservation reservation, boolean isChecked, Date checkedDate) {
    this.reservationReminderId = reservationReminderId;
    this.reservation = reservation;
    this.isChecked = isChecked;
    this.checkedDate = checkedDate;
}
}