私のプロジェクトには2つのエンティティがあり、それらの間には多対多の関係があります。関係は、ポストグルのヘルパーマッピングテーブルを使用して表現されます。このテーブルには、各エンティティの関連ID(かなり標準的なもの)が含まれています。Hibernateは@ManyToMany双方向関係で無限ループを引き起こします
表をbucket_object_mapping
とし、2つの列、bucket_id
,object_id
とします。
バケットクラス:私は(それは必要)Bucket
クラスへのマッピングを持たないModel
クラスで
@Entity
@Table(name = "bucket")
public class Bucket {
// Some fields omitted here
@ManyToMany(cascade = {}, fetch = FetchType.LAZY)
@JoinTable(
name = "bucket_object_mapping",
joinColumns = @JoinColumn(name = "bucket_id"),
inverseJoinColumns = @JoinColumn(name = "object_id")
)
private List<Model> models;
}
私はこの単純なクエリを実行すると:
SELECT bucket FROM Bucket bucket WHERE bucket.customerId=:customerId
を
データは最初は問題なく返されますが、その後はへの無限ループのクエリが返されます10テーブルが走り始めるのはなぜなのか分かりません。私がSpringMVCコントローラを通して結果リストを返すと、それが起こっているように見えます。 私はBucket
をDTOに変換しますが、Model
ではありません(Model
エンティティにはBucket
への参照がないため、循環参照の問題はないはずです)。
コントローラーコード:
@RequestMapping(value = "", method = RequestMethod.GET)
@ResponseBody
public List<BucketDTO> getAllByCustomer(@RequestParam(value = "customerid") final Long customerId) {
return bucketService.getAllBucketsForCustomer(customerId);
}
サービスのコード:
@Transactional
public List<BucketDTO> getAllBucketsForCustomer(final Long customerId) {
List<Bucket> buckets = bucketDao.getBucketsForCustomer(customerId);
List<BucketDTO> result = bucketDtoConverter.toDtoList(buckets);
return result
}
につながっチャットをたどることができますか? – LearningPhase
@LearningPhase - 質問を編集しました。私はまた、コントローラとDAOの間を橋渡しするサービスメソッドを追加しました。 – Avi
Show Model.class。 Bucket.classとの関係はありますか? – Victor1125