4
我试图从采购订单(Po)的id中获取材料。路径和连接表中有几个集合。从具有复杂JPA查询的集合中获取值
Po.java
@Entity
@Table(name = "T_PO")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Po implements Serializable {
@ManyToOne
@JoinColumn(name = "customer_id", referencedColumnName = "id")
private Customer customer;
@OneToMany(mappedBy = "po", targetEntity = Po_part.class)
private List<Po_part> partList;
Part.java
@Entity
@Table(name = "T_PART")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Part implements Serializable {
@ManyToMany
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@JoinTable(name = "T_PART_MATERIAL",
joinColumns = @JoinColumn(name="parts_id", referencedColumnName="ID"),
inverseJoinColumns = @JoinColumn(name="materials_id", referencedColumnName="ID"))
private Set<Material> materials = new HashSet<>();
@OneToMany(mappedBy="part",targetEntity=Po_part.class)
private List<Po_part> partList;
Po_part.java
@Entity
@Table(name = "T_PO_PART")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Po_part implements Serializable {
@ManyToOne
private Part part;
@ManyToOne
private Po po;
Material.java
@Entity
@Table(name = "T_MATERIAL")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Material implements Serializable {
@ManyToOne
@JoinColumn(name = "supplier_id", referencedColumnName = "id")
private Supplier supplier;
@ManyToOne
@JoinColumn(name = "supplier_id_2", referencedColumnName = "id")
private Supplier supplier2;
JPA查询在MaterialRespository
@Query("SELECT m FROM Material m "
+ "JOIN Po po "
+ "JOIN po.partList po_part "
+ "JOIN po_part.part parts "
+ "JOIN parts.materials materials "
+ "WHERE po.id = ?1")
List<Material> getListOfMaterialsForPo(Long id);
最终的结果是我希望能够得到一个宝
-------更新所需的材料清单------ ---
我得到了下面的查询,以便对MySQL工作台工作,但只有当我真正需要的实际材料对象来访问它的getter返回库存。不确定这是否可以用SQL解决。
查询:
@Query(value="SELECT materials.inventory_count materials "
+"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 "
+"join hillcresttooldie.T_PART_MATERIAL material "
+"on material.materials_id = part.id "
+"join hillcresttooldie.T_MATERIAL materials "
+"on material.materials_id = materials.id "
+"where po.id LIKE %?1", nativeQuery = true)
List<Integer> getListOfMaterialsForPo(Long id);
而且真的有我不知道的另一件事情是有MySQL的工作类型替补JPA。在Eclipse中我有下面附加:
不过,我从来没有使用过。认为将此添加到帖子会有所帮助。
你也指什么类?感谢您的帮助,我在JPA非常新,并且纠正它并不那么困难,但我仍然掌握着它。我自学自己。我确实通过创建一个类来实现它,并使用JPA中的NEW运算符用我需要的值初始化类。但是,您的解决方案更简单,我感谢你。 – Drew1208
Java类名不包含下划线。你的。在开始这个项目之前想象你自己,在StackOverflow上帮助我,在那里我向你展示一个名为'Po'的类。你会不知道这样的班级代表什么?现在想象我给你看一个名为PuchaseOrder的课程?现在没有那么清楚了吗? –
是的,我明白了,再次感谢。 – Drew1208