1. 程式人生 > 其它 >JPA 查詢返回重複第一行的問題

JPA 查詢返回重複第一行的問題

用JPA Entity對映資料表查詢出來f返回List的時候發現表裡滿足條件得記錄有三條,但實體查詢出來結果三條記錄都是拿第一條重複,分析發現是因為Entity實體沒有指定主鍵欄位或者指定的欄位不唯一所導致的。比如:

@Entity
@Table(name = "my_table")
public class PoiPlaceEntity implements java.io.Serializable {
    private String name;
    private String time;
    private String content;
    private Double lat;
    private Double lon;
  
    @Id
    @Column(name = "name")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Basic
    @Column(name = "time")
    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    @Basic
    @Column(name = "content")
    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    @Basic
    @Column(name = "lat")
    public Double getLat() {
        return lat;
    }

    public void setLat(Double lat) {
        this.lat = lat;
    }

    @Basic
    @Column(name = "lon")
    public Double getLon() {
        return lon;
    }

    public void setLon(Double lon) {
        this.lon = lon;
    }

}

上面的實體中把name欄位當作主鍵,但name不唯一,導致查詢出來的結果中記錄條數是對的,但仔細一看都是拿第一條記錄重複的。其實只要從表裡找一個唯一欄位設定成主鍵就可以,比如上面的實體中經緯度座標應該是唯一的,所以在lat 前面加個@Id註解:

    @Id
    @Column(name = "lat")
    public Double getLat() {
        return lat;
    }