Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JPA中初始化模型_Java_Jpa - Fatal编程技术网

Java 如何在JPA中初始化模型

Java 如何在JPA中初始化模型,java,jpa,Java,Jpa,我只是尝试通过JPA查询初始化列表中的一个对象。到目前为止,我的一天半旅程都没有成功 public interface Po_partRepository extends JpaRepository<Po_part, Long> { @Query(value = "SELECT " + "po.id po_id," + "po.po_number po_number," + "po.due_date po_due_date," + "po_part.id po_part_

我只是尝试通过JPA查询初始化列表中的一个对象。到目前为止,我的一天半旅程都没有成功

public interface Po_partRepository extends JpaRepository<Po_part, Long> {
  @Query(value = "SELECT " + "po.id po_id," + "po.po_number po_number,"
    + "po.due_date po_due_date," + "po_part.id po_part_id,"
    + "po_part.part_quantity part_quantity," + "part.id part_id,"
     + "part.part_number part_number,"
    + "part.part_description part_description,"
    + "part.plasma_hrs_per_part plasma_hrs,"
    + "part.grind_hrs_per_part grind_hrs,"
    + "part.mill_hrs_per_part mill_hrs,"
    + "part.brakepress_hrs_per_part brakepress_hrs "
    + "FROM hillcresttooldie.t_po po "
    + "join hillcresttooldie.t_po_part po_part "
    + "on po_part.po_id = po.id " + "join hillcresttooldie.t_part part "
    + "on part.id = po_part.part_id;", nativeQuery = true)
List<Shop_Orders> getShopOrders(); }
我为车间订单创建了表:

下面是一个示例,演示了一旦运行了查询并且在列表中设置了对象,我想做什么

Shop_Orders shopOrders;
int poNumber = shopOrders.getPo_number(); 
但是,当我运行查询时,我不断得到以下错误

[ERROR] com.htd.aop.logging.LoggingAspect - Exception in 
com.htd.web.rest.Po_partResource.getAll() with cause = null
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to 
com.htd.repository.Shop_Orders
at com.htd.web.rest.Po_partResource.getAll(Po_partResource.java:85) ~  
[classes/:na]
我将发布Po.java和Part.java的片段,以防有人想查看它们

/**
* A Po.
*/
@Entity
@Table(name = "T_PO")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Po implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "po_number")
    private String po_number;
part.java

/**
 * A Part.
 */
@Entity
@Table(name = "T_PART")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Part implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

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

感谢提前提供建议。

如果您有一个表,其中包含与您的
Shop\u orders
实体对应的数据,那么您的查询应该是:

@Query("SELECT so FROM Shop_Orders so")
因为您已经将
Shop\u Orders
实体映射到该表

但是,由于您似乎正在为涉及的3个表(PO,Part和两者之间的联接表,PO_Part)构建一个非规范化模型,那么您可能需要为原始查询创建一个非规范化数据库视图,然后通过在
@表
注释中指定视图,将该视图映射到您的
商店订单
实体

或者,您可以为
Shop_Orders
(不需要是JPA实体)创建一个构造函数,该构造函数接受所有列。换言之:

public Shop_Orders(int po_id, int po_number, Date po_due_date, etc... )
然后,假设在
Po
Part
之间的联接表中有一个实体
Po\u Part
(请参阅),查询可以是:

@Query("SELECT new Shop_Orders(po.id, po.po_number, "
        + "po.due_date, po_part.id, po_part.part_quantity, "
        + "part.id, part.part_number, part.part_description "
        + "part.plasma_hrs_per_part, part.grind_hrs_per_part, "
        + "part.mill_hrs_per_part, part.brakepress_hrs_per_part) "
        + "FROM Po po LEFT JOIN po.partList po_part "
        + "LEFT JOIN po_part.part");
这还假设
Po
有一个名为
partList
Po\u Part
集合

您很可能需要完全打包
Shop\u Orders
类的路径


顺便说一下,我建议您不要使用复数来命名JPA实体类。换句话说,您的实体类应该称为
Shop\u Order
(或者可能称为
Shop\u Order
),因为该类的每个实例只表示一个车间订单。

Shop\u订单应该符合JavaBean合同,以便您可以将其作为一个实体。缺点是什么?作为一个实体,您可以从PersistenceContext获取EntityManager(如果bean是应用程序管理的),并按照您的意愿加载bean。如果bean是容器管理的,那么您可以通过依赖项注入获得EntityManager?我刚刚更改了Shop_Orders类,使其符合JavaBean契约。但是,我没有添加任何注释。我仍在努力将这一切联系在一起。我刚刚创建了一个名为SHOP_ORDERS的表,添加了“@”实体注释“@”列等,并尝试再次运行查询,但仍然得到错误消息:cannot cast to com.htd.repository.SHOP_ORDERS属性通常直接对应于数据库表,但不一定。一个实体也可以表示对应于多个表的数据模型的非规范化表示。@scottb更新了注释,希望我能更清楚地说明我的问题所在。
@Query("SELECT new Shop_Orders(po.id, po.po_number, "
        + "po.due_date, po_part.id, po_part.part_quantity, "
        + "part.id, part.part_number, part.part_description "
        + "part.plasma_hrs_per_part, part.grind_hrs_per_part, "
        + "part.mill_hrs_per_part, part.brakepress_hrs_per_part) "
        + "FROM Po po LEFT JOIN po.partList po_part "
        + "LEFT JOIN po_part.part");