我有以下JPA实体结构。
@Entity
@Table(name = "PARENT_DETAILS")
class Parent{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "parent_details_seq")
@SequenceGenerator(name = "parent_details_seq", sequenceName = "PARENT_DETAILS_SEQ", allocationSize = 1)
@Column(name = "PARENT_ID")
private long parentId;
@Column(name = "PARENT_NAME")
private String parentName;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "childPK.parent", cascade = CascadeType.ALL)
private Set<Child> child;
//setters and getters
}
@Entity
@Table(name = "CHILD_DETAILS")
public class Child {
private ChildPK childPK;
public void setProgramProcessesPK(ChildPK childPK) {
this.childPK = childPK;
}
@EmbeddedId
public ChildPK getChildPK() {
return childPK;
}
}
@Embeddable
public class ChildPK implements Serializable {
private static final long serialVersionUID = 1L;
private Parent parent;
private long childId;
@Column(name = "CHILDID")
public long getChildId() {
return childId;
}
public void setChildId(long childId) {
this.childId = childId;
}
@ManyToOne
@JoinColumn(name = "PARENT_ID", referencedColumnName = "PARENT_ID", nullable = false)
public ParentDetails getParent() {
return parent;
}
}
我想写一个JPA查询,它将返回给定parent_id的PARENT_NAME和所有子级的计数。
t我能想到的唯一解决办法是加入并编写一个复杂的条件查询。
我想不出使用简单的JPA查询获得结果的方法。
有更简单的方法吗?
您可以使用以下JPA命名查询:
private static class ParentChildsNumber {
public String parentName;
public Integer childsNum;
public ParentChildsNumber(String parentName, Integer childsNum) {
this.parentName = parentName;
this.childsNum = childsNum;
}
}
@NamedQuery(name="getParentChildsNumberQuery", query="SELECT NEW ParentChildsNumber(p.parentName, SIZE(p.child)) FROM Parent p WHERE p.parentId = :parentId GROUP BY p.parentId, p.parentName")
通过以下方式在您的代码中使用它:
@PersistenceContext(unitName="YourPersistentUnit")
private EntityManager em;
em.createNamedQuery("getParentChildsNumberQuery", ParentChildsNumber.class).setParameter("parentId", parentId).getSingleResult();
你试过大小吗?像“从父父级中选择parent.parent名称、大小(parent.child)”这样的方法可能会奏效。
我正在尝试建立自己的Webshop。 我有两个表-products和categories。结构是这样的: 当用户点击main category时,我选择要显示的产品如下所示: 问题是,我希望当用户单击主类别时,也可以选择其子类别中的所有产品。例如,类别是类别的子类别,在db中类似于 如您所见,我的当前选择将不会选择或,因为用户正在查看具有的类别...如何修改我的选择,使它将显示所有产品从主类别的子
问题内容: 假设我有两个表,“父母”和“孩子”。父子关系是一个多对多关系,可通过标准的交叉引用表来实现。 我想查找使用SQL(特别是MS SQL Server的T-SQL; 2005语法可以接受)的给定子集的所有成员所引用的所有Parent记录。 例如,假设我有: List item Parent Alice Parent Bob Child Charlie references Alice, B
问题内容: 当我在Eclipse中编辑Java类时,当光标悬停在类变量上时,我可以使用+ 弹出框来显示其所有父级和子类。IntelliJ中的等效项是什么? 例: 管道是我的光标。 问题答案: 导航| 但是,在“面板”中,“ 类型 +” 将显示类似的信息。您可以 浮动 和 取消 固定面板,以使其仅在使用键盘快捷键时才出现在固定的显示位置。
三个表保存文章信息: 类别表: lft:左值 rgt:正确的值 lft和rgt值为嵌套集,例如: 文章表: 物品类别地图表: 如何在MySQL中从一个类别和子类别中选择所有文章? 我期望: 1、 单击cat2时,显示cat2和cat5以及cat6和cat7的所有项目。 2、 单击cat5时,仅显示cat5的所有项目。 3、点击root时,显示所有类别的所有文章(包括cat1、cat2、cat3、c
我有两个从抽象类继承的类,它们有父子关系。 所以我使用了注释OneToOne和ManyToOne,但是子类中的父实体总是为空。有人能帮我吗,我花了几个小时谷歌和测试了许多conf,但没有成功。 这些是我的类中的代码: ... ... ... 如果我不添加@JoinCol列注释,JPA会创建一个关联表,但无法检索父级,而关联可以直接通过在数据库中请求来完成。 非常感谢你的帮助。 祝好
问题内容: 我有下表: 我想让Folder类具有父子关系。 问题答案: 我相信正确的映射将是: 该会的工作只有当每个家长有最多一个孩子,上面的代码适用于更一般的情况下,父母可以有许多儿童。另外,为简单起见,我省略了get / set方法。