Java 使用Crudepository接口自动实现返回不同类型对象的方法
我正在尝试将SpringMVC应用程序转换为SpringREST+Angular2应用程序的组合。这是我的“Ticket.java”实体类(跳过了getter和setter) 如何在TicketDAO中编写一个方法,返回给定booking.id的所有客户?下面是TicketDAO.java接口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
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(国际招标);
}