2017-03-26 8 views
0

Spring MVCアプリケーションをSpring REST + Angular2アプリケーションのコンボに変換しようとしています。これは私の 'Ticket.java'エンティティクラスですsetter)異なるタイプのオブジェクトを返すメソッドを自動実装するCrudRepositoryインターフェイスを使用する

ticket.idで与えられたすべての顧客を返すメソッドをTicketDAOに書き出すにはどうすればよいですか?ここでTicketDAO.javaインタフェース

public interface TicketDAO extends CrudRepository<Ticket, Integer>{ 

    // I want to auto-implement such type of method using CrudRepository 
// public List<Customer> getCustomersBooking(int bId); } 

私は以前のような方法を実装しているされています

@Override 
    public List<Customer> getCustomersBooking(int bId) { 


     Session currentSession = sessionFactory.getCurrentSession(); 

     logger.info("DAOgetCustomersBooking: D1"); 
     List<Customer> customer = new ArrayList<Customer>(); 

     Query<Ticket> theQuery = 
       currentSession.createQuery("from Ticket where bookings_id = "+bId, Ticket.class); 

     List<Ticket> tickets = theQuery.getResultList(); 
      for (Ticket temp: tickets){ 
       customer.add(temp.getCustomer()); 
       } 

     return customer; 
    } 

しかし、今、私はTicketDAOインタフェースでCrudRepositoryを用いた方法のようなタイプを自動的に実装したいです。私はそれを可能にするメソッド宣言をどのように記述しますか?参考のために

、Booking.java

@Entity 
@Table(name="bookings") 
public class Booking { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="id") 
    private Integer id; 

    @ManyToOne 
    @JoinColumn(name="van_id") 
    private Van van; 

    @ManyToOne 
    @JoinColumn(name="driver_id") 
    private Driver driver; 

    @ManyToOne 
    @JoinColumn(name="route_id") 
    private Route route; 

    @Column(name="registered_seats") 
    private int registeredSeats; 

    @Column(name="departure_time") 
    private String departureTime; 
    @Column(name="arival_time") 
    private String arrivalTime; 
    @Column(name="departure_date") 
    private String departureDate; 



    @Column(name="expected_price") 
    private int expectedPrice; 

    //Ticket.java reference 
    @OneToMany(mappedBy="booking",fetch=FetchType.LAZY,cascade=CascadeType.ALL) 
    private Set<Ticket> tickets; 


    //Webdata.java reference 
     @OneToOne(mappedBy="bookingWebdata",fetch=FetchType.LAZY,cascade=CascadeType.ALL) 
      private Webdata webdata; 

私はJpaRepositoryを使用したプロジェクトのためのCustomers.java

@Entity 
@Table(name="customer") 
public class Customer { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="id") 
    private Integer id; 

    @Column(name="first_name") 
    private String firstName; 

    @Column(name="last_name") 
    private String lastName; 

    @Column(name="email") 
    private String email; 

    @Column(name="username") 
    private String username; 

    @Column(name="password") 
    private String password; 

    @Column(name="regnumber") 
    private int regNumber; 

    @Column(name="phonenumber") 
    private int phoneNumber; 

    @Column(name="flagged") 
    private int flagged; 


    //Ticket.java reference 
     @OneToMany(mappedBy="customer",cascade=CascadeType.ALL) 
     private Set<Ticket> tickets; 

答えて

1

が、私はそれは、要求の同じようなものだと思います。

Javaエンティティに基づいてHQLで@Query()を使用する必要があります。

私はオブジェクトで直接IDを要求していないので、idで行うことができるかどうかわかりません。

public interface TicketDAO extends CrudRepository<Ticket, Integer>{ 

    @Query("SELECT t.customer FROM Ticket t WHERE t.booking = ?1") 
    public List<Customer> getCustomersBooking(Booking booking);  
} 

あなたがIDで試してみたい場合は、それがその周りを次のようになります:

public interface TicketDAO extends CrudRepository<Ticket, Integer>{ 

    @Query("SELECT t.customer FROM Ticket t WHERE t.booking.id = ?1") 
    public List<Customer> getCustomersBooking(int bId);  
} 
このよう
関連する問題