मैं, डाटा-जेपीए के साथ एक EntityGraph लागू करने के लिए कोशिश कर रहा हूँ का कारण बनता है QueryDslPredicateExecutor<T>
पद्धति का उपयोग करके उजागर findAll(Predicate, Pageable)
एक मैं की जरूरत है, मैं @EntityGraph
के साथ उनकी व्याख्या करने के लिए इसे ओवरराइड करने की कोशिश की के बाद से तो मुसीबतों शुरू हुआ फेंक रहा है:अधिभावी वसंत-डाटा-जेपीए EntityGraph साथ डिफ़ॉल्ट विधि टिप्पणी करने QueryException
org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=appointment,role=com.physioclinic.entity.Appointment.createdBy,tableName=user,tableAlias=user5_,origin=appointment appointmen0_,columns={appointmen0_.createdBy_id ,className=com.physioclinic.entity.User}}] [select count(appointment)
from com.physioclinic.entity.Appointment appointment where lower(concat(concat(appointment.patient.person.name,?1),appointment.patient.person.surname)) like ?2 escape '!']; nested exception is java.lang.IllegalArgumentException: org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=appointment,role=com.physioclinic.entity.Appointment.createdBy,tableName=user,tableAlias=user5_,origin=appointment appointmen0_,columns={appointmen0_.createdBy_id ,className=com.physioclinic.entity.User}}]
जब मैं डिफ़ॉल्ट विधि का उपयोग जिस तरह से यह है आता है बुरा कुछ भी नहीं है, होता भी एक ही Predicate
का उपयोग कर, लेकिन मैं EntityGraph उपयोग नहीं कर सकते हैं, वहाँ मेरी कार्यान्वयन या के साथ कुछ समस्या है भविष्यवाणी के साथ?
परिदृश्य में वस्तुओं रहा:
इकाई
@Table(name = "appointment")
@Entity
@Getter
@Setter
@NamedEntityGraphs({@NamedEntityGraph(name = "graph.Appointment.default", includeAllAttributes = true,
attributeNodes = {@NamedAttributeNode(value = "physiotherapist"),
@NamedAttributeNode(value = "patient"),
@NamedAttributeNode(value = "care")})})
public class Appointment extends PersistableAuditable<User, Long> {
private static final long serialVersionUID = -4325126792470516159L;
@DateTimeFormat(pattern = "dd/MM/yyyy")
@NotNull
@Column(name = "date")
private LocalDate date;
@DateTimeFormat(pattern = "HH:mm")
@NotNull
@Column(name = "schedule")
private LocalTime schedule;
@ManyToOne
@JoinColumn(name = "physiotherapist", referencedColumnName = "id")
private Physiotherapist physiotherapist;
@ManyToOne
@JoinColumn(name = "service", referencedColumnName = "id")
private Service service;
@ManyToOne
@JoinColumn(name = "patient", referencedColumnName = "id")
private Patient patient;
@ManyToOne(cascade = CascadeType.REMOVE)
@JoinColumn(name = "care", referencedColumnName = "id")
private Care care;
public Appointment(long id) {
setId(id);
}
public Appointment() {
}
/**
* Helpers
*/
public boolean isSpecialPrice() {
return care.getPrivateCare() && care.getSpecial() && care.getSpecialPrice() != null;
}
public boolean isPrivatePrice() {
return care.getPrivateCare() && care.getHealthCare() == null;
}
public boolean isHealthCarePrice() {
return !care.getPrivateCare() && care.getHealthCare() != null;
}
}
भंडार
public interface AppointmentRepository extends JpaRepository<Appointment, Long>,
QueryDslPredicateExecutor<Appointment> {
@EntityGraph(value = "graph.Appointment.default")
Page<Appointment> findAll(Predicate predicate, Pageable pageable);
}
विधेय
public final class AppointmentPredicate {
private AppointmentPredicate() {
}
public static Predicate bySearch(String search) {
QPerson person = QAppointment.appointment.patient.person;
return person.name.concat(" ").concat(person.surname).containsIgnoreCase(search);
}
}
जहां आप समाधान ढूंढने में सक्षम हैं? एक ही समस्या है। – bjoernhaeuser
अफसोस की बात है कि मुझे कोई समाधान नहीं मिला, इसलिए मैं इसे डिफ़ॉल्ट रूप से छोड़ देता हूं –