Java 使用Crudepository接口自动实现返回不同类型对象的方法

Java 使用Crudepository接口自动实现返回不同类型对象的方法,java,spring-mvc,spring-boot,Java,Spring Mvc,Spring Boot,我正在尝试将SpringMVC应用程序转换为SpringREST+Angular2应用程序的组合。这是我的“Ticket.java”实体类(跳过了getter和setter) 如何在TicketDAO中编写一个方法,返回给定booking.id的所有客户?下面是TicketDAO.java接口 public interface TicketDAO extends CrudRepository<Ticket, Integer>{ // I want to auto-imp

我正在尝试将SpringMVC应用程序转换为SpringREST+Angular2应用程序的组合。这是我的“Ticket.java”实体类(跳过了getter和setter)

如何在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);    }
公共接口TicketDAO扩展了crudepository{
//我想使用crudepository自动实现这种类型的方法
//公共列表GetCustomerBooking(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;
    }
@覆盖
公共列表GetCustomerBooking(国际投标){
会话currentSession=sessionFactory.getCurrentSession();
logger.info(“DaogetCustomerBooking:D1”);
List customer=new ArrayList();
查询查询=
currentSession.createQuery(“从预订处的票证_id=“+bId,Ticket.class”);
List tickets=theQuery.getResultList();
用于(票务温度:票务){
添加(temp.getCustomer());
}
退货客户;
}
但是现在我想在TicketDAO接口中使用crudepository自动实现这种类型的方法。我将如何编写一个方法声明,使我能够这样做

作为参考,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;
@实体
@表(name=“预订”)
公共课预订{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“id”)
私有整数id;
@许多酮
@JoinColumn(name=“van_id”)
私人厢式货车;
@许多酮
@JoinColumn(name=“driver\u id”)
私人司机;
@许多酮
@JoinColumn(name=“route\u id”)
专用线路;
@列(name=“注册席位”)
私有int注册SEAT;
@列(name=“出发时间”)
私有字符串离开时间;
@列(name=“arival\u time”)
私人字符串到达时间;
@列(name=“出发日期”)
私有字符串departureDate;
@列(name=“预期价格”)
私人预期价格;
//Ticket.java参考
@OneToMany(mappedBy=“booking”,fetch=FetchType.LAZY,cascade=CascadeType.ALL)
私人订票;
//Webdata.java参考
@OneTONE(mappedBy=“bookingWebdata”,fetch=FetchType.LAZY,cascade=CascadeType.ALL)
私有网络数据;
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;
@实体
@表(name=“客户”)
公共类客户{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“id”)
私有整数id;
@列(name=“first_name”)
私有字符串名;
@列(name=“last_name”)
私有字符串lastName;
@列(name=“email”)
私人字符串电子邮件;
@列(name=“username”)
私有字符串用户名;
@列(name=“password”)
私有字符串密码;
@列(name=“regnumber”)
私人注册号码;
@列(name=“phonenumber”)
私人整数电话号码;
@列(name=“标记”)
私有int标记;
//Ticket.java参考
@OneToMany(mappedBy=“customer”,cascade=CascadeType.ALL)
私人订票;

对于一个项目,我使用了JpaRepository,但我认为这也是同样的请求

必须根据java实体将@Query()与HQL一起使用

我在请求中直接给出了object,而不是id,所以我不知道您是否可以像对待object一样对待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);    
}
公共接口TicketDAO扩展了crudepository{
@查询(“从Ticket t中选择t.customer,其中t.booking=?1”)
公共列表GetCustomerBooking(预订预订);
}
如果您想尝试使用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);    
}
公共接口TicketDAO扩展了crudepository{
@查询(“从Ticket t中选择t.customer,其中t.booking.id=?1”)
公共列表GetCustomerBooking(国际招标);
}

对于一个项目,我使用了JpaRepository,但我认为这也是同样的请求

必须根据java实体将@Query()与HQL一起使用

我在请求中直接给出了object,而不是id,所以我不知道您是否可以像对待object一样对待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);    
}
公共接口TicketDAO扩展了crudepository{
@查询(“从Ticket t中选择t.customer,其中t.booking=?1”)
公共列表GetCustomerBooking(预订预订);
}
如果您想尝试使用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);    
}
公共接口TicketDAO扩展了crudepository{
@查询(“从Ticket t中选择t.customer,其中t.booking.id=?1”)
公共列表GetCustomerBooking(国际招标);
}