Spring 如何在对映射实体应用筛选器后从一对一映射实体检索数据';s属性弹簧

Spring 如何在对映射实体应用筛选器后从一对一映射实体检索数据';s属性弹簧,spring,hibernate,Spring,Hibernate,如何在对映射实体的属性应用筛选器后从一对一映射实体检索数据 这是我的酒店实体课程 package com.springmvcweb.model; import javax.persistence.*; import java.io.Serializable; import java.util.ArrayList; import java.util.List; @Entity @Table(name = "HOTEL", schema = "HOTEL") public class Hotel

如何在对映射实体的属性应用筛选器后从一对一映射实体检索数据

这是我的酒店实体课程

package com.springmvcweb.model;

import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

@Entity
@Table(name = "HOTEL", schema = "HOTEL")
public class HotelEntity implements Serializable{
private long hotelId;
private String hotelName;
private String hotelDescription;
private String hotelWebsite;
private Long hotelPhoneNo;
private String hotelEmail;
private Long hotelStarRating;

private AddressEntity addressEntity;
private CategoryEntity categoryEntity;
private List<AmenityEntity> amenitiesList;

@ManyToMany(cascade = {CascadeType.MERGE,CascadeType.PERSIST,CascadeType.DETACH,CascadeType.REFRESH})
@JoinTable(name = "HOTEL_AMENITY", joinColumns = {@JoinColumn(name = "HOTEL_ID", referencedColumnName = "HOTEL_ID")},
        inverseJoinColumns = {@JoinColumn(name = "AMENITY_ID", referencedColumnName = "AMENITY_ID")})
public List<AmenityEntity> getAmenitiesList() {
    return amenitiesList;
}

public void setAmenitiesList(List<AmenityEntity> amenitiesList) {
    this.amenitiesList = amenitiesList;
}

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "HOTEL_ADDRESS_ID")
public AddressEntity getAddressEntity() {
    return addressEntity;
}

public void setAddressEntity(AddressEntity addressEntity) {
    this.addressEntity = addressEntity;
}

@ManyToOne(cascade = {CascadeType.MERGE,CascadeType.PERSIST,CascadeType.DETACH,CascadeType.REFRESH})
@JoinColumn(name = "HOTEL_CATEGORY_ID")
public CategoryEntity getCategoryEntity() {
    return categoryEntity;
}

public void setCategoryEntity(CategoryEntity categoryEntity) {
    this.categoryEntity = categoryEntity;
}

@Id
@Column(name = "HOTEL_ID")
public long getHotelId() {
    return hotelId;
}

public void setHotelId(long hotelId) {
    this.hotelId = hotelId;
}

@Basic
@Column(name = "HOTEL_NAME")
public String getHotelName() {
    return hotelName;
}

public void setHotelName(String hotelName) {
    this.hotelName = hotelName;
}

@Basic
@Column(name = "HOTEL_DESCRIPTION")
public String getHotelDescription() {
    return hotelDescription;
}

public void setHotelDescription(String hotelDescription) {
    this.hotelDescription = hotelDescription;
}

@Basic
@Column(name = "HOTEL_WEBSITE")
public String getHotelWebsite() {
    return hotelWebsite;
}

public void setHotelWebsite(String hotelWebsite) {
    this.hotelWebsite = hotelWebsite;
}

@Basic
@Column(name = "HOTEL_PHONE_NO")
public Long getHotelPhoneNo() {
    return hotelPhoneNo;
}

public void setHotelPhoneNo(Long hotelPhoneNo) {
    this.hotelPhoneNo = hotelPhoneNo;
}

@Basic
@Column(name = "HOTEL_EMAIL")
public String getHotelEmail() {
    return hotelEmail;
}

public void setHotelEmail(String hotelEmail) {
    this.hotelEmail = hotelEmail;
}

@Basic
@Column(name = "HOTEL_STAR_RATING")
public Long getHotelStarRating() {
    return hotelStarRating;
}

public void setHotelStarRating(Long hotelStarRating) {
    this.hotelStarRating = hotelStarRating;
}

public void addAmenities(AmenityEntity amenityEntity){
    if(amenitiesList==null){
        amenitiesList = new ArrayList<>();
    }
    amenitiesList.add(amenityEntity);
}

@Override
public String toString() {
    return "HotelEntity{" +
            "hotelId=" + hotelId +
            ", hotelName='" + hotelName + '\'' +
            ", hotelDescription='" + hotelDescription + '\'' +
            ", hotelWebsite='" + hotelWebsite + '\'' +
            ", hotelPhoneNo=" + hotelPhoneNo +
            ", hotelEmail='" + hotelEmail + '\'' +
            ", hotelStarRating=" + hotelStarRating +
            ", addressEntity=" + addressEntity +
            ", categoryEntity=" + categoryEntity +
            ", amenitiesList=" + amenitiesList +
            '}';
}
}

现在,我想检索所有按位置筛选的酒店(比如cityname或statename),我使用的查询如下:

@Override
public List<HotelEntity> getHotelsByLocation(String location) {
try{
    session = sessionFactory.getCurrentSession();
}catch (Exception e){
    session = sessionFactory.openSession();
}

Query query = session.createQuery("from HotelEntity where HotelEntity.addressEntity.cityName " +
        "like :location");
query.setParameter("location",location);
return query.getResultList();
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "HOTEL_ADDRESS_ID")
public AddressEntity getAddressEntity() {
    return addressEntity;
}

现在它给了我一个空指针异常。请指导。

@OneToOne
关系无论如何都会被急切地获取,因此添加这些信息是多余的

关于该查询,我将如下所示:

 " select he from HotelEntity he 
 "  inner join he.addressEntity ae"
 " where ae.cityName like :location");

你能把这个问题说得再清楚一点吗?有点不清楚
 " select he from HotelEntity he 
 "  inner join he.addressEntity ae"
 " where ae.cityName like :location");