ManytoOne映射中的Spring数据查询问题

时间:2018-08-22 10:49:21

标签: postgresql spring-boot spring-data-jpa many-to-one

我正在使用Spring Data和postgresql。而且我在City中有ManyToOne映射,称为实体校准。当我执行选择查询时,出现以下错误。

@Entity
@Table(name="\"City\"")
public class City implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="city_id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer cityId;

    @Column(name="city_name")
    private String cityName;

    @ManyToOne(fetch= FetchType.LAZY)
    @JoinColumn(name="state_id")
    private State state;

    @Column(name="district_name")
    private String districtName;

}



@Entity
@Table(name="\"State\"")
@NamedQuery(name="State.findAll", query="SELECT s FROM State s")
public class State implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="state_id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer stateId;

    @Column(name="state_name")
    private String stateName;

    @ManyToOne(fetch= FetchType.LAZY)
    @JoinColumn(name="country_id")
    private Country country;

}


@Entity
@Table(name="\"Country\"")
public class Country implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="country_id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer countryId;

    @Column(name="country_name")
    private String countryName;

    @Column(name="sort_name")
    private String sortName;

    @Column(name="phone_code")
    private Integer phoneCode;

}

Repository
public interface CityRepository extends CrudRepository<City, Integer>{

    /**
     * @param countryId
     * @param cityName
     * @return
     */
    @Query("From City city where city.state.country.countryId =:countryId and city.cityName like:cityName and city.active = true")
    List<City> searchCityBynameAndCountryId(@Param("countryId") int countryId,@Param("cityName") String cityName);

}
  

实际上我曾经做过上面提到的查询,以获取其中的数据   休眠和Mysql组合中的子句,但是这里我使用Spring   数据和Postgresql,而我在讲解这个选择查询时   跟随错误。有人可以帮我解决这个问题。

错误

  

由以下原因引起:org.postgresql.util.PSQLException:错误:列   city0_.stateid不存在提示:也许您打算引用   列“ city0_.state_id”。位置:204

1 个答案:

答案 0 :(得分:1)

如果您使用的是Spring Data,请使用IT。您无需为该简单查询编写自己的@Query。

您需要这个:

List<City> findAllByStateCountryCountryIdAndCityNameLike(Integer countryId, String cityName);

我省略了查询city.active = true"中的最后一个参数,因为您的课程中没有类似的字段。