2017-12-10 8 views
0

@Vlad Mihalceaが提供する例のように、EmbeddedIdクラスで@ManyToManyマッピングを実装しました。しかし、私はSpringのRESTリポジトリを作成し、このJoinTableエンティティ用に使用する必要があります。このエンティティ(JoinTable)で、私は古典的なidを持っていないので、このように、JoinTableには通常のLong IDがありませんが、代わりにEmbeddedIdがあります。これを使用してSpringリポジトリを作成するにはどうすればよいですか?

@CrossOrigin 
@RepositoryRestResource(collectionResourceRel = "companyproducts", path = "companyproducts") 
public interface CompanyProductRepository 
    extends PagingAndSortingRepository<CompanyProduct, CompanyProduct.CompanyProductId> { 

} 

:しかし

public class FooBar { 
    .... 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id;  

    ... 
} 

通常、私は、リポジトリを有効にするには、このような何かをするだろう

代わりに私が持っている:

public class FooBar { 
    .... 

    @EmbeddedId 
    private FooBarId id;  

    ... 
} 

私はLongかを使用することはできませんintとしましょう。識別子がこれらのタイプではないため、基本的にタイプがFooBarIdです。

@Embeddable 
public class FooBarId implements Serializable { 

    @Column(name = "foo_id") 
    private Long fooId; 

    @Column(name = "bar_id") 
    private Long barId; 

    private FooBarId() {} 

    public FooBarId(Long fooId, Long barId) { 
     this.fooId= fooId; 
     this.barId= barId; 
    } 
... 
} 

私はリポジトリ宣言でLongの代わりにFooBarIdを入れて、もちろん、してみてくださいでしたが、その後、私のREST JSONレスポンスに私が取得:ところで

、私もそのクラスのほとんどが提供されます

http://localhost:8080/api/foobar/[email protected] 

(数値パラメータではなく、クラス自体へのパスに注意してください(例:5))。

私の質問はLong,intなどの代わりにEmbeddedIdのリポジトリを使用できますか?もちろん

答えて

0

はい

public interface FooBarRepository extends PagingAndSortingRepository<FooBar, FooBarId > { } 

IDがそう代わりに古典的なプリミティブとを使用埋め込みクラスです。

応答における問題は、おそらくあなたの取得/保存ロジック

編集に関連したものです:代わりに、私はあなたがリポジトリからIDを取得した期待する数字のクラスであること応答に基づいていますidは埋め込み可能なクラスなので明らかに数値から数値を取得するはずです

+0

ええと、データベース自体の結合テーブルを見ると、この結合テーブルのレコードに数値IDは与えられませんでした2つの外部キーだけがそこにありますが、それはもちろん期待されています) 私はレスポンスに数字のIDを持つことはできませんなぜなら、dbテーブルには1つもないからです。 – developer10

+0

残念ながら、現在の設定から数値IDを取得する方法がわかりません。私はこれらの2つのFKに別の数値IDを追加しようとしましたが、それは不可能でした。つまり、私は、結合テーブルの特定のレコードのリポジトリによってCRUD操作を公開できるようにしたいと考えています。この表にはPKと数値IDの2つのFKしかありません。疑いの余地はありません。私はそれを確認する誰かが必要です。 – developer10

+0

私は単純にhttp:// localhost:8080/api/companyproductsのように要求します(リポジトリ宣言を私が使用した注釈で更新します) – developer10

関連する問題