我有如下实体
课程进展
@Entity
public class ProgressNote implements Serializable{
@Id
private NotesKey notesKey = new NotesKey();
private Set<PatientObjective> patientObjectives;
public NotesKey getNotesKey() {
return notesKey;
}
public void setNotesKey(NotesKey notesKey) {
this.notesKey = notesKey;
}
@OneToMany(fetch=FetchType.LAZY)
@Access(AccessType.PROPERTY)
@JoinColumns({
@JoinColumn(name="noteNumber",referencedColumnName="noteNumber"),
@JoinColumn(name="ddate",referencedColumnName="ddate"),
@JoinColumn(name="patient_id",referencedColumnName="patient_id")
})
public Set<PatientObjective> getPatientObjectives() {
return patientObjectives;
}
public void setPatientObjectives(Set<PatientObjective> patientObjectives) {
this.patientObjectives = patientObjectives;
}
}
课堂笔记
@Embeddable
public class NotesKey implements Serializable{
private Byte noteNumber;
@Temporal(javax.persistence.TemporalType.DATE)
@Column(name="ddate")
private Date noteDate;
private Patient patient;
public Byte getNoteNumber() {
return noteNumber;
}
public void setNoteNumber(Byte noteNumber) {
this.noteNumber = noteNumber;
}
public Date getNoteDate() {
return noteDate;
}
public void setNoteDate(Date noteDate) {
this.noteDate = noteDate;
}
@ManyToOne(fetch=FetchType.LAZY)
@Access(AccessType.PROPERTY)
public Patient getPatient() {
return patient;
}
public void setPatient(Patient patient) {
this.patient = patient;
}
@Override
public int hashCode() {
........
}
@Override
public boolean equals(Object obj) {
........
}
}
目标类
@Entity
public class PatientObjective implements Serializable{
@Id
private PatientObjectiveKey patientObjectiveKey;
public PatientObjectiveKey getPatientObjectiveKey() {
return patientObjectiveKey;
}
public void setPatientObjectiveKey(PatientObjectiveKey patientObjectiveKey) {
this.patientObjectiveKey = patientObjectiveKey;
}
}
类PatientObjectiveKey
@Embeddable
public class PatientObjectiveKey implements Serializable{
private Objective objective;
private Byte noteNumber;
@Temporal(javax.persistence.TemporalType.DATE)
@Column(name="ddate")
private Date noteDate;
private Patient patient;
@ManyToOne(fetch=FetchType.LAZY)
@Access(AccessType.PROPERTY)
public Objective getObjective() {
return objective;
}
public void setObjective(Objective objective) {
this.objective = objective;
}
public Byte getNoteNumber() {
return noteNumber;
}
public void setNoteNumber(Byte noteNumber) {
this.noteNumber = noteNumber;
}
public Date getNoteDate() {
return noteDate;
}
public void setNoteDate(Date noteDate) {
this.noteDate = noteDate;
}
@ManyToOne(fetch=FetchType.LAZY)
@Access(AccessType.PROPERTY)
public Patient getPatient() {
return patient;
}
public void setPatient(Patient patient) {
this.patient = patient;
}
@Override
public int hashCode() {
.......
}
@Override
public boolean equals(Object obj) {
........
}
}
在我使用这个命名查询之后
@namedQuery(name="findAllProgressNoteAnd Objals", query="from ProgressNote p内连接获取p.patientObjals as o其中p.notesKey.patient.id=: ResidentId)")使用SpringHibernate模板findByNamedQueryAndNamedParam
在表I中有两个ProgressNote,一个只有一个目标,另一个有17个目标。我在Java中得到如下结果。
查询生成为
select progressno0_.ddate as ddate46_0_, progressno0_.noteNumber as noteNumber46_0_, progressno0_.patient_id as patient17_46_0_, patientobj1_.ddate as ddate36_1_, patientobj1_.noteNumber as noteNumber36_1_, patientobj1_.objective_id as objective5_36_1_, patientobj1_.patient_id as patient6_36_1_, progressno0_.assessment as assessment46_0_, progressno0_.bloodPressure1 as bloodPre4_46_0_, progressno0_.bloodPressure2 as bloodPre5_46_0_, progressno0_.creationDate as creation6_46_0_, progressno0_.height as height46_0_, progressno0_.lastUpdatedDate as lastUpda8_46_0_, progressno0_.plans as plans46_0_, progressno0_.status as status46_0_, progressno0_.subject as subject46_0_, progressno0_.temprature as temprature46_0_, progressno0_.tempratureUnit as temprat13_46_0_, progressno0_.lastid as lastid46_0_, progressno0_.waist as waist46_0_, progressno0_.weight as weight46_0_, progressno0_.weightUnit as weightUnit46_0_, patientobj1_.remark as remark36_1_, patientobj1_.value as value36_1_, patientobj1_.ddate as ddate46_0__, patientobj1_.noteNumber as noteNumber46_0__, patientobj1_.patient_id as patient6_46_0__, patientobj1_.ddate as ddate0__, patientobj1_.noteNumber as noteNumber0__, patientobj1_.objective_id as objective5_0__, patientobj1_.patient_id as patient6_0__ from pnheader progressno0_ inner join pnobjremark patientobj1_ on progressno0_.ddate=patientobj1_.ddate and progressno0_.noteNumber=patientobj1_.noteNumber and progressno0_.patient_id=patientobj1_.patient_id where progressno0_.patient_id=?
问题
我看到的问题是为什么我会得到ProgressNote的多个单一实例(id=152)。有没有办法避免这种重复?
如果有人向我解释或指出正确的方向,我将不胜感激。
使用Hibernate 3.6、Mysql 5.6.10
使用不同的:
select distinct p from ProgressNote p
inner join fetch p.patientObjectives as o
where p.notesKey.patient.id = :patientId)
问题内容: 我有以下(嵌套)对象: 接下来,我要做的就是像这样引用子对象: 现在,我想做的就是从变量中获取对对象的引用。就像是: 这可能吗? 问题答案: 否。无法知道它来自哪个对象。 而这两个只是有同一个对象的引用。 您也可以这样做: 您现在有三个引用,和,同一个对象。它们都不是特别的。
我有三个表/实体: > 游戏 网站游戏 地点 我必须在教义2中写查询,这将使所有游戏(作为对象)可用于特定的网站(得到这个特定的网站作为对象)。唯一的关系(多对一)在表/实体SiteGame中,它包含列/对象: 游戏/游戏id 站点/站点id 通常,原始SQL看起来像(并且可以工作): 这是我在教义中尝试过的,但失败了: 错误:路径表达式无效。必须是StateFieldPathExpression
我正在使用hibernate在car和person表之间进行一对一映射。但一个人可能有车,也可能没有车。现在,在使用hibernate标准从person表中获取记录时,我只想获取那些拥有汽车的人,即person表中存在相应汽车表条目的条目。如何使用hibernate标准/别名实现这一点? 下面是一段代码。请提供获取结果所需的条件或别名:
问题内容: hibernate映射中的默认访存类型是什么? 探索之后我知道的是: 渴望 一对一。 对于一对多来说,这是 懒惰的 。 但是在Eclipse中对其进行测试后,它对所有人都非常渴望。 是否取决于我使用的是JPA还是Hibernate? 问题答案: 这取决于您使用的是JPA还是Hibernate。 根据JPA 2.0规范,默认值为: hibernate的时候,一切都是懒惰的 更新: 最新版
当我对它进行降序排序时,它应该首先显示Parent3,因为它有一个Z。这是我当前的hql,它得到了1>2>3的错误结果: 如果没有distinct,尽管它选择了多个相同的父级,但它仍然很好。 我有一个模型设置如下: 编辑:在集合中按HQL顺序对其进行排序,尽管当双亲具有相同的children.name值时,它不会比较下一个可能的值。即。 如果Parent1有孩子abba,zeon Parent2有
根据这篇文章,我正在尝试反序列化与JooQ的一对多关联(没有代码生成)。 这是我的目标课程。 我的JooQ查询如下: 方法无法按预期工作。生成的SQL语句如下所示: 翻译后的postgres查询没有正确替换的key属性,这会导致SQL异常。 PS:我正在使用JooQ 3.14.0和postgres 11.5