我正在使用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
答案 0 :(得分:1)
如果您使用的是Spring Data,请使用IT。您无需为该简单查询编写自己的@Query。
您需要这个:
List<City> findAllByStateCountryCountryIdAndCityNameLike(Integer countryId, String cityName);
我省略了查询city.active = true"
中的最后一个参数,因为您的课程中没有类似的字段。