當 Spring Data JPA 從數據庫返回數據時,我遇到了問題。我在這里再試一次。下面是設置。Spring V 1.5.15.RELEASEPGV 9.5.4查詢語句:CREATE TABLE dmg.gps_user_to_data_set ( group_id int8 NOT NULL, data_set int4 NOT NULL, agency_id int8 NOT NULL, FOREIGN KEY (agency_id) REFERENCES funding_agency(agency_id), FOREIGN KEY (group_id, data_set) REFERENCES data_set(group_id, data_set))WITH ( OIDS=FALSE) ;回購:public interface GpsUserToDataSetTestRepository extends JpaRepository<GpsUserToDataSetTest, DataSetPK> { @Query(value = "select group_id,data_set,agency_id from gps_user_to_data_set where group_id=?1 and data_set=?2", nativeQuery = true) List<GpsUserToDataSetTest> test(Long groupId, Long dataSet); @Query(value = "select group_id,data_set,agency_id from gps_user_to_data_set where group_id=?1 and data_set=?2", nativeQuery = true) List<Object> test2(Long groupId, Long dataSet);}實體:@Entity@Data@Table(name = "GPS_USER_TO_DATA_SET")public class GpsUserToDataSetTest implements Serializable { @EmbeddedId private DataSetPK primaryKey; @Column(name = "AGENCY_ID") private Long agencyId;}測試:System.out.println("ID: "+dataSetPK);System.out.println("YYY : ");gpsUserToDataSetTestRepo.test(dataSetPK.getGroupId(), dataSetPK.getDataSetId()).stream().forEach(e -> { try { System.out.println(new ObjectMapper().writeValueAsString(e)); } catch(JsonProcessingException jpe) { }});System.out.println("ZZZ: ");gpsUserToDataSetTestRepo.test2(dataSetPK.getGroupId(), dataSetPK.getDataSetId()).stream().forEach(e -> { try { System.out.println(new ObjectMapper().writeValueAsString(e)); } catch(JsonProcessingException jpe) { }});所以我運行它并得到兩個不同的結果,我希望當接口 GpsUSerToDataSetTest 時封裝的信息應該與我使用 java.lang.Object 運行相同的查詢時完全相同,但是你可以看到 ids 不一樣,下面是數據庫和標準輸出轉儲中的數據。我什至不知道在這里說什么,這對我來說似乎很奇怪,并且可能是一個錯誤?D B:group_id |data_set |agency_id |---------|---------|----------|1356 |1 |2 |1356 |1 |2 |1356 |1 |19 |
1 回答

白板的微信
TA貢獻1883條經驗 獲得超3個贊
如果查詢結果被捕獲到,List<GpsUserToDataSetTest>
對象test1()
將GpsUserToDataSetTest ORM
被填充并添加到列表中。因此,JSON
轉換后的字符串是ORM
.
另一方面,當查詢結果被捕獲到其中時,List<Object>
這些test2()
被填充為純粹的值數組,然后添加到列表中。因此,JSON
表示只有值數組。
在存儲庫中編寫一個新方法test3()
并將結果捕獲到其中List<Map<String, String>>
并觀察輸出。您會注意到字符串中的普通單個鍵值(沒有像 primaryKey 等字段)JSON
。
編輯
此外,由于返回行中的主鍵(@Id 或@EmbeddedId)字段相同,因此從 test1() 返回的所有行都是重復的。Hibernate 緩存是這里的原因。這不是 Hibernate 中的錯誤,而是應該修復數據庫或正確使用 @Id 注釋的數據。
添加回答
舉報
0/150
提交
取消