我有兩個類 Port 和 Person。一個 Person 可以有很多埠,因此兩個類之間存在 ManyToOne 關系。我想回傳 Person 中存在的所有埠。這是 Person 類:
@Entity
@Table(name = "person")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
@Column(name = "id")
private Long id;
@NotNull
@Column(name = "age", nullable = false)
private String age;
@Column(name = "mdp")
private String mdp;
@ManyToOne
@JoinColumn(name = "puerto_id")
private Port port;
//getters & setters
這是埠類:
@Entity
@Table(name = "port")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Port implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
@Column(name = "id")
private Long id;
@Column(name = "city")
private String city;
在PortRepository.java我做了這個查詢,我在 PortResource.java 中呼叫
@SuppressWarnings("unused")
@Repository
public interface PortRepository extends JpaRepository<Port, Long> {
@Query(value = "SELECT DISTINCT * FROM port t1 INNER JOIN person t2 ON t1.ID = t2.puerto_id", nativeQuery = true)
Page<Port> findPersonsPorts(Pageable pageable);
}
//
@GetMapping("/persons/ports")
public ResponseEntity<List<Port>> getPersonsPorts(@org.springdoc.api.annotations.ParameterObject Pageable pageable) {
log.debug("REST request to get a page of Ports");
Page<Port> page = portRepository.findPersonsPorts(pageable);
HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), page);
return ResponseEntity.ok().headers(headers).body(page.getContent());
}
在郵遞員上執行此http://localhost:8080/api/people我有以下回應:
[
{
"id": 2902,
"age": "88",
"mdp": null,
"port": null
},
{
"id": 3001,
"age": "45",
"mdp": "mdp",
"port": {
"id": 2952,
"city": "rabat"
}
},
{
"id": 3002,
"age": "88",
"mdp": "mdp",
"port": {
"id": 2952,
"city": "rabat"
}
} ]
當發送這個請求 http://localhost:8080/api/persons/ports 我得到重復的埠值
[
{
"id": 2952,
"city": "rabat"
},
{
"id": 2952,
"city": "rabat"
} ]
更新:
當我在 h2 資料庫上執行相同的查詢時:SELECT DISTINCT * FROM PORT t1 INNER JOIN PERSON t2 ON t2.puerto_id = t1.ID
我得到了這個表,你可以看到行是不同的,因為它在同一個表中回傳人員和埠表的列。我不確定這是否是問題所在

uj5u.com熱心網友回復:
您的DISTINCT關鍵字不起作用,因為您的結果集并不是真正唯一的,請查看您的記錄,ID列有不同的資料,因此它們不一樣,DISTINCT對您沒有幫助。
如果您只想使用 PORT 表資料,請嘗試使用t1.*而不是*
使用這個查詢:
SELECT DISTINCT t1.* FROM PORT t1 INNER JOIN PERSON t2 ON t2.puerto_id = t1.ID
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/431838.html
