2017-05-07 3 views
0

私は次のアーキテクチャを持っています: 2つのエンティティクラス、1対多の関係。 1つの自動サービスとそれに対する多くのサービス。 今、私は1つの自動サービスのすべてのサービスを名前で取得したいと考えています。サーバーサイドでネストされたオブジェクトのリストを取得するにはどうしたらいいですか? 1対多の関係

私はそれを行うことはできますか?または、クライアントに完全なObjectを送信し、その後にリストを取得する必要がありますか?

私はすべてのゲッターとセッターで2つのエンティティを持っています。私はスペースを節約するためにそれらを投稿しません。

マイAutoService.class

@Entity 
@Table(name = "AutoRate") 
public class AutoService { 

    public AutoService() { 
    } 

    @Id 
    @GeneratedValue(generator = "increment") 
    @GenericGenerator(name = "increment", strategy = "increment") 
    private long id; 

    @Column(name = "serviceName", nullable = false) 
    private String serviceName; 

    @Column(name = "imageURL", nullable = false) 
    private String imageURL; 

    @Column(name = "mapCoordinate", nullable = false) 
    private String mapCoordinate; 

    @Column(name = "websiteURL", nullable = false) 
    private String websiteURL; 

    @Column(name = "phoneNumber", nullable = false) 
    private String phoneNumber; 

    @JsonManagedReference 
    @OneToMany(mappedBy = "autoService", fetch = FetchType.EAGER, cascade = CascadeType.PERSIST) 
    private List<Service> services = new ArrayList<Service>(); 
} 

Service.class

@Entity 
@Table(name = "Service") 
public class Service { 

    public Service() { 
    } 

    @Id 
    @GeneratedValue(generator = "increment") 
    @GenericGenerator(name = "increment", strategy = "increment") 
    @Column(name = "serviceId", unique = true, nullable = false) 
    private long serviceId; 

    @Column(name = "serviceName", nullable = false) 
    private String serviceName; 

    @Column(name = "category", nullable = false) 
    private String category; 

    @Column(name = "price", nullable = false) 
    private int price; 

    @JsonBackReference 
    @ManyToOne 
    @JoinColumn(name = "autoServiceId", nullable = false) 
    private AutoService autoService; 
} 

私は次のリポジトリのインターフェースがあります。

public interface AutoRateRepository extends JpaRepository<AutoService, Long> { 
    AutoService findByServiceName(String serviceName); 
    List<Service> findServicesByServiceName(String serviceName); 
} 

ServiceImpl

@Service 
public class AutoRateServiceImpl implements AutoRateService { 
@Override 
    public List<com.webserverconfig.user.entity.Service> getAllServicesByAutoServiceName(String name) { 
     return repository.findServicesByServiceName(name); 
    } 
} 

そして、私のコントローラからの方法:データベースから

@RequestMapping(value = "/getServices/{serviceName}", method = RequestMethod.GET) 
    @ResponseBody 
    public List<Service> getServices(@PathVariable("serviceName") String serviceName){ 
     List<Service> services = dataBaseService.getAllServicesByAutoServiceName(serviceName); 
     return services; 
    } 

構造: enter image description here

現在のエラー、私はサービスのリストを取得しようとしています:

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [com.webserverconfig.user.entity.AutoService] to type [com.webserverconfig.user.entity.Service]] with root cause 
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [com.webserverconfig.user.entity.AutoService] to type [com.webserverconfig.user.entity.Service] 

答えて

0

私はミキシングお勧めしません異なるエンティティを生成するクエリ(JpaRepository<E,I>インターフェイスジェネリック型で指定されたもの以外)

私はちょうどServiceエンティティクエリの別のリポジトリを作成し、そこに内部でその方法を置く:

public interface ServiceRepository extends JpaRepository<Service, Long> { 
    List<Service> findByServiceName(String serviceName); 
} 

あなたの現在のアプローチの問題は、春には、常に指定した型に結果をキャストしようとするということですJpaRepositoryの汎用パラメータではAutoServiceです。

+0

将来、フレームワークが自動サービス名でサービスを見つけることができないという問題に直面しますか?もし私がサービスのためにすべてを動かしたら? – Andrew

関連する問題