亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java Hibernate 奇怪的編組錯誤?

Java Hibernate 奇怪的編組錯誤?

繁星coding 2023-05-10 13:18:33
當 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 注釋的數據。


查看完整回答
反對 回復 2023-05-10
  • 1 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號