2017-12-12 6 views
0

私はSpringのRESTリポジトリに親子エンティティを設定しています。SpringデータのRESTリポジトリとして親エンティティと子エンティティの両方を公開するREST

@RepositoryRestResource(collectionResourceRel = "deposit", path = "deposit") 
public interface DepositRepository extends PagingAndSortingRepository<Deposit, Long>{ 

} 

とインストゥルメントのために同じものを次のように次のように私は預金のためのRepositoryRestresourceを定義した

@Entity 
@Table(name = "INSTR_DTL") 
public class Instrument { 

    @ManyToOne 
    @JoinColumn(name = "DPST_ID") 
    @JsonBackReference 
    private Deposit deposit; 
} 

:親がこの

@Entity 
@Table(name = "DPST_DTL") 
public class Deposit { 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "deposit", orphanRemoval=true) 
    private List<Instrument> instrumentList = new ArrayList<Instrument>(); 
} 

のように見える子供はこのようになります:

@RepositoryRestResource(collectionResourceRel = "instrument", path = "instrument") 
public interface InstrumentRepository extends PagingAndSortingRepository<Instrument, Long>{ 

} 

いくつかの子レコードを持つ親をPOSTしようとすると、次のようなメッセージが表示されます。 "message": "[java.net.URI]タイプから[com.XXX.irh.insprc.instrument .Instrument]値 'countryCode';ネストされた例外はjava.lang.IllegalArgumentExceptionです:URI countryCodeを解決できません。それはローカルかリモートですか?唯一のローカルURIが解決可能です。」 }、

『国番号は』子どもの最初のフィールドであることを起こるJSON

私はいくつかの子供たちと親を照会する場合は、TEH結果のJSONは、子供たちをexpantしないと "instrumentList":{"href": "http://localhost:9090/deposit/8/instrumentList"}

ただし、exported = falseで子リポジトリをマークすると、この問題を回避できますが、子エンティティREST APIで公開することはできません。

質問:

とにかく、カスタムコントローラなどを書くことなく、親エンティティと子エンティティの両方で基本的なCRUD機能を公開できますか?

DDDのベストプラクティスでは、親はRESTリポジトリを介して公開する必要がある集約ですが、私は両者に独立したCRUD機能が必要なユースケースを残念ながら持っています。

答えて

0

あなたはprojections使用することができます。

@Projection(name = "withInstruments", types = Person.class) 
public interface WithInstruments { 

    @Value("#{target.depositName}") 
    String getDepositName(); 

    List<Instrument> getInstrumentList(); 
} 

次に、あなたが一緒にあなたのエンティティを取得することができます:

GET /deposits?projection=withInstruments 
{ 
    "depositName": "deposit1", 
    "instrumentList": [ 
     { 
      "intrumentName": "instrument1", 
     }, 
     { 
      "intrumentName": "instrument1", 
     } 
    ] 
} 

追加info

関連する問題