【问题标题】:Spring data query issue in ManytoOne mapingManytoOne映射中的Spring数据查询问题
【发布时间】:2018-08-22 10:49:21
【问题描述】:

我正在使用 Spring Data 和 postgresql。我在 City 命名实体 cals 中有 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);

}

其实我曾经用上面提到的查询来获取数据的位置 hibernate 和 Mysql 组合中的子句,但这里我使用的是 Spring 数据和 Postgresql,当我执行这个选择查询时,我得到了 以下错误。请有人帮我解决这个问题。

错误

原因:org.postgresql.util.PSQLException: ERROR: column city0_.stateid 不存在 提示:也许您的意思是参考 “city0_.state_id”列。位置:204

【问题讨论】:

  • 你检查过stateId getter的名字是getStateId而不是getStateid吗?
  • 不,实际上我在调用存储库方法时遇到了这个错误。
  • 检查实体类,如果stateId的getter方法被称为getStateId而不是getStateid

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


【解决方案1】:

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

你需要这个:

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

我从您的查询 city.active = true" 中省略了最后一个参数,因为您的班级中没有这样的字段。

【讨论】:

  • 对不起,它在实体类中,我只是为了缩短代码而将其删除。
  • 引起:org.postgresql.util.PSQLException:错误:city0_.stateid 列不存在 提示:也许您的意思是引用“city0_.state_id”列。职位:204
  • 我对其进行了测试并为我工作。是您自己创建的表,还是 hibernate 为您创建的?
  • 我自己创建的
  • CREATE TABLE public."City" ( city_id integer NOT NULL DEFAULT nextval('"City_seq"'::regclass), city_name character varying(30) NOT NULL, state_id integer NOT NULL, active boolean NOT NULL DEFAULT true, District_name 字符变化,pincode 整数,CONSTRAINT "City_pkey" PRIMARY KEY (city_id),CONSTRAINT "stateId" FOREIGN KEY (state_id) REFERENCES public."State" (state_id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION) WITH (OIDS=FALSE)
猜你喜欢
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多