Java 使用JPA在Vaadin网格中显示一些列
我创建了实体类:Java 使用JPA在Vaadin网格中显示一些列,java,spring-boot,jpa,vaadin,Java,Spring Boot,Jpa,Vaadin,我创建了实体类: package order; import javax.persistence.*; import java.time.LocalDate; import java.util.UUID; @Entity @Table(name = "bo_order") public class Order { @Id @GeneratedValue(strategy= GenerationType.IDENTITY) private Long id; pr
package order;
import javax.persistence.*;
import java.time.LocalDate;
import java.util.UUID;
@Entity
@Table(name = "bo_order")
public class Order {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Long id;
private String login;
private Long internalNumber;
private String food;
@Column(name="data_ins")
private LocalDate dateOfOrder;
private String orderNumber;
public Order(){}
public Order(String login)
{
this.login = login;
}
public Order(String login, Long internalNumber, String food, LocalDate dateOfOrder) {
this.login = login;
this.internalNumber = internalNumber;
this.food = food;
this.dateOfOrder = dateOfOrder;
}
public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
}
public String generateOrderNumber()
{
return UUID.randomUUID().toString();
}
@Override
public String toString() {
return "Order{" +
"id=" + id +
", login='" + login + '\'' +
", internalNumber=" + internalNumber +
", food='" + food + '\'' +
", dateOfOrder=" + dateOfOrder +
'}';
}
}
已将存储库添加到此:
package order;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface OrderRepository extends CrudRepository<Order, Long>{
List<Order> findByLogin(String login);
@Query(value="SELECT id, login FROM bo_order", nativeQuery = true)
public List<Order> findAllPurchasers();
}
我知道
数据\u-ins
不在结果集中,因为我不希望它在那里。我可以用findAll
按顺序显示网格中的所有值,但我只需要id
和login
。我怎样才能做到这一点?我还试图制作列表
而不是列表
,但后来我在显示时遇到了问题 网格从Order
类中获取参数,所以如果有许多getter,那么它们将显示在列中。我做到了:
private void listPurchasers()
{
List<Order> allOrders = (List<Order>) orderRepository.findAll();
grid.setItems(allOrders);
grid.setColumnOrder("id", "login", "dateOfOrder");
grid.removeColumn("food");
}
private void listpowers()
{
List allOrders=(List)orderRepository.findAll();
网格设置项(allOrders);
setColumnOrder(“id”、“login”、“dateOfOrder”);
网格。移除柱(“食品”);
}
因此,添加/删除要显示的列似乎非常容易;DR:将
grid.setColumns(“id”、“login”)
添加到listpowers()
方法的末尾,或在@Query
注释中的数据库列列表中包含数据
当您使用Grid(Class beanType)
构造函数创建Grid
时,将为bean类型中的每个getter添加一列。这将导致错误,除非所有这些getter的数据也从数据库加载
在这种情况下,@Query
注释定义只应从数据库中获取id
和login
列的数据。您得到的异常涉及数据库列data\u ins
,它似乎映射到dateOfOrder
bean属性,但我没有看到任何代码会删除该属性自动添加的列
确保网格只使用所需列的最简单方法是使用setColumns
方法。该方法的工作原理类似于setColumnOrder
,只是它还删除了未作为参数包含的任何列
或者,如果您确实希望数据库中的@Query
属性在网格中显示为一列,您还可以更改@Query
注释,使其也包含该属性。我认为主要问题是与spring数据相关的更多,因为他似乎期望他的repo仅从两列创建订单的实例显示在结果集中::选择id,从bo_订单登录
。所以他可能需要研究这样一个子集的投影。实际上grid.setColumns()做了一项工作——它只显示我想要的列,即使我按对象顺序设置了所有字段。
Caused by: org.postgresql.util.PSQLException: The column name data_ins was not found in this ResultSet.
private void listPurchasers()
{
List<Order> allOrders = (List<Order>) orderRepository.findAll();
grid.setItems(allOrders);
grid.setColumnOrder("id", "login", "dateOfOrder");
grid.removeColumn("food");
}