2017-03-26 42 views
0

我想將Spring MVC應用程序轉換爲Spring REST + Angular2應用程序的組合。這是我的「Ticket.java」實體類(跳過getter和setter)使用CrudRepository接口來自動實現返回不同類型的對象的方法

@Entity 
@Table(name="ticket") 
public class Ticket { 

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

@ManyToOne 
@JoinColumn(name="bookings_id") 
private Booking booking; 

@ManyToOne 
@JoinColumn(name="customer_id") 
private Customer customer; 

@Column(name="seat_no") 
private int seatNumber; 



public Ticket(){ 

} 

如何在TicketDAO中編寫一個方法,返回給定booking.id的所有客戶?這裏是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; 

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

爲我所用JpaRepository一個項目,但我認爲這是同一種類的請求。

您必須基於您的java實體使用@Query()和HQL。

我直接在請求中給出了對象,而不是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);  
} 
相關問題