2017-12-10 14 views
0

@Vlad Mihalcea가 제공 한 예제에 따라 EmbeddedId 클래스로 @ManyToMany 매핑을 구현했습니다. 그것은 작동하지만,이 JoinTable 엔티티에 Spring의 REST 저장소를 생성하고 사용해야한다.JoinTable은 정규 Long ID가 아니라 대신 EmbeddedId를 가지고 있습니다. 어떻게 Spring 리포지토리를 생성합니까?

public class FooBar { 
    .... 

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

    ... 
} 
:이 같은 고전 id을하지 않아도이 엔티티 (관절 식)에 있기 때문에,

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

} 

그러나 :

일반적으로, 나는 저장소를 사용하려면이 같은 일을 할 것입니다

대신 내가 가진 :

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를 가질 가능성은 없습니다. , db 테이블에 하나가 없기 때문에? – developer10

+0

불행히도 현재 설정에서 숫자 ID를 얻는 방법을 모르겠습니다. 이 두 FK를 따라 다른 숫자 ID를 추가하려고했지만 불가능한 것으로 나타났습니다. 즉, 조인 테이블의 특정 레코드에 대해 저장소에서 CRUD 작업을 수행 할 수 있기를 원합니다. 이 테이블에는 PK와 숫자 ID가없는 두 개의 FK 만 있기 때문에 가능합니다. 나는 그것을 확인하기 위해 누군가가 필요합니다. – developer10

+0

다음과 같이 간단하게 요청합니다 : http : // localhost : 8080/api/companyproducts (내가 사용했던 주석으로 저장소 선언을 업데이트합니다) – developer10