我有这样的一对一关系
父母
@JsonAutoDetect
@Entity
@Table(name = "Parent")
public class Parent{
private Integer id;
private Child child;
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
@Column (name="idparent")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "parent")
@JoinColumn(name="idchild", nullable=true)
public Child getChild() {
return child;
}
public void setChild(Child child) {
child.setParent(this);
this.child = child;
}
}
和孩子
@JsonAutoDetect
@Entity
@Table(name="Child")
public class Child{
private Integer id;
private Parent parent;
@Id
@GeneratedValue(generator = "foreign")
@GenericGenerator(name = "foreign", strategy = "foreign", parameters = { @Parameter(name = "property", value = "parent") })
@Column (name = "idchild")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@OneToOne(fetch = FetchType.LAZY, optional = true)
@Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE })
@PrimaryKeyJoinColumn
@JsonIgnore
public Parent getParent() {
return parent;
}
public void setParent(Parent parent) {
this.parent= parent;
}
}
我想创建返回具有孩子isNotNull的父母的条件,我尝试过像
Criteria criteria = session.createCriteria(Parent.class);
criteria.add(Restrictions.isNotNull("child"));
但是没有用,请给我一个例子,能帮我吗?谢谢
首先,映射是错误的。在父类中,您是说该关联是由映射的child.parent
,而在您说该关联是使用名为的连接列进行映射之后id_child
。下定决心
它是由child.parent
属性映射的,应该删除@JoinColumn
。或者它是由JoinColumn映射的,您应该@PrimaryKeyJoinColumn
在子级中删除,并mappedBy="child"
在Child实体中使用。
现在,要使查询正常工作,无论映射是什么,您都应该简单地进行内部联接:
Criteria criteria = session.createCriteria(Parent.class);
criteria.createAlias("child"); // inner join
由于联接是内部联接,因此它将仅选择具有非空子代的父母。
首先,我知道这个查询有点混乱,但它可以正常工作,直到至少有一条记录存在,并且设置为true,此时没有返回任何记录。如果有另一条记录的设置为false或两者的组合,则它可以正常工作,即返回的记录的所有票证总数都设置为0或适当的值。 我已将查询更新为,并将票证表联接更改为left(也尝试了full outer),但它仍然存在上述问题。 为什么会发生这种情况,我能做些什么来防止它?
问题内容: 我的数据库表中具有以下格式的数据: 该列将来自该列的数据作为父记录。带有值的表示根项目。我需要编写查询以按以下顺序获取数据: 我需要得到根记录(与记录为0),然后是所有和这根记录,然后获得下根的记录,然后和在这个根记录等等。 问题答案: 我在这里提出的解决方案使用了物化路径的概念。以下是使用样本数据的实例化路径的示例。我希望它可以帮助您理解物化路径的概念: 每个节点都有一个实例化路径,
问题内容: 一个活动有很多参与者。参与者的字段为“状态”。 我需要找到除以下事件以外的所有事件:每个参与者的状态都为“出席”的事件。 我可以找到带有以下AR代码的某些参与者处于“呈现”状态的所有事件: 这样就创建了SQL: 这 几乎 可行。问题是,如果参与者的某行(在范围内 )的状态为“离开”,则该事件仍将被获取,因为至少某些同级记录的状态与其他状态相同而不是“现在”。 我需要确保我正在过滤所有事
我有一个动觉流(20个片段),大约有1天的数据延迟,这是由基于KCL的动觉消费者消费的。消费者部署了20个ECS实例,因此每个实例都有一个从每个shard提取数据的线程。 根据文档,看起来一个getRecords调用最多可以获取10000条记录,或者最大负载大小为10 MB。然而,当我监视消费者日志时,并不是所有的碎片都达到了这个限制。使用单个getRecords调用获取的记录在消费者实例中非常不
问题内容: 我想使用Hibernate的 Criteria API ,选择表中具有给定列最大值的记录。 我试图用投影,创造一个别名为,然后使用它,但它不断告诉我“ 无效号码 ”。 用Hibernate做到这一点的正确方法是什么? 问题答案: 您可以使用来表示子查询,如下所示: 参考文献 Hibernate Core参考指南 15.8。分离的查询和子查询
我有一个父表和子表。父记录已由其他进程插入。我需要添加引用父记录的子记录,例如: 插入CHILD记录时,引用父记录的唯一信息是地址。我需要从父表中获取PARENT_ID,使用子的ADDRESS来设置子的FK。 在hibernate中有没有一种方法可以做到这一点,这样我就不需要通过地址查询父项来将其与子记录一起插入?或者,我是否继续沿着这条路径,按地址查询父对象,然后将父对象传递给子对象?