孩子:@EDIT感谢@MithatKonuk
@Entity
@Table(name="child")
public class Child {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="ID")
private int id;
@Column(name="FirstName")
private String firstName;
@Column(name="SecondName")
private String secondName;
@Column(name="PESEL")
private String PESEL;
@Column(name="Sex")
private String sex;
@JsonBackReference
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="familyid",referencedColumnName = "id")
private Family family;
和家人:@EDIT感谢@米塔科努克
@Entity
@Table(name="family")
public class Family {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private int id;
@OneToOne(cascade = CascadeType.ALL)
private Father father;
@JsonManagedReference
@OneToMany(mappedBy = "family",fetch=FetchType.EAGER,cascade = CascadeType.ALL)
private List<Child> childList;
我想得到作为家庭一部分的孩子的名单。我尝试进行查询:@编辑感谢@MithatKonuk
@Transactional
public List<Child> findAllChild(int id) {
// TODO Auto-generated method stub
HibernateUtil.initManager();
HibernateUtil.getEntityManager().clear();
Query query = HibernateUtil.getEntityManager().createQuery("SELECT child FROM Child child FETCH JOIN child.family u WHERE u.id = :userId ");
query.setParameter("userId",id);
List<Child> result = query.getResultList();
HibernateUtil.shutdown();
return result;
}
当我尝试运行它时,总是会出现错误:
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting "all", found 'JOIN' near line 1, column 64 [SELECT child FROM com.example.Family3.domain.Child child FETCH JOIN child.family u WHERE u.id = :userId ]
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.hql.internal.ast.ErrorTracker.throwQueryException(ErrorTracker.java:93) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:296) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:188) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:143) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:119) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:153) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:595) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:704) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final]
... 9 common frames omitted
我需要你的帮助。
@编辑好的,所以我将此代码更新为完整的实体。你还需要更多吗?我很抱歉,也许这很容易,但是我正在学习Hibernate,我不知道这个cos出了什么问题。谢谢你的回答。
JOIN应该在FETCH之前,试试这个查询:
"SELECT child FROM Child child JOIN FETCH child.family WHERE child.family.id = :userId"
首先您需要更改查询
@Transactional
public List<Child> findAllChild(int id) {
// TODO Auto-generated method stub
HibernateUtil.initManager();
HibernateUtil.getEntityManager().clear();
Query query = HibernateUtil.getEntityManager().createQuery("SELECT child FROM Child child JOIN FETCH child.family WHERE child.family.id = :userId ");
query.setParameter("userId",id);
List<Child> result = query.getResultList();
HibernateUtil.shutdown();
return result;
}
第二个是请在每个类中添加@Entity和@Table(“孩子”)和@Table(“家庭”),如下所示
@Entity
@Table("child table name")
public class Child{}
@Entity
@Table("family table name")
public class Family{}
问题内容: 我试图弄清楚如何构建该数据库。之前我已经使用过Apple的核心数据,现在我正在从事另一个需要MySQL的项目。我是MySQL的新手,所以请放轻松。:) 在这个例子中,假设我有三个表,,,和。把它画出来,一个可以有多个s,但是一个只能有一个;每个都有其主键,我需要使用它来获取正确的信息。 那么如何在这里建立这样的关系呢?我听说过创建索引和外键,但不确定它们如何正常工作。 最后,我需要做的
主要内容:嵌入式关系,引用式关系MongoDB 中的关系表示多个文档之间在逻辑上的相互联系,文档之间可以通过嵌入或引用来建立联系,这种联系可以是 1:1(1对1)、1:N(1对多)、N:1(多对1)、N:N(多对多)。例如我们要存储用户的收货地址,一个用户可以拥有多个收货地址,从而形成 1:N 的关系。 下面展示了一个记录用户信息的文档的结构: 以下是记录用户地址的文档结构: 嵌入式关系 在嵌入式关系中,我们可以将记录用户地址的
问题内容: 想象一个情况,约翰有两个孩子爱丽丝和鲍勃,鲍勃有一只猫猎户座。 几年后,约翰想重命名为简。 …让孩子们知道。 然后我必须更新cat,因为Bob变了。 一个对象更改时,是否可以自动更新所有相关对象?我看了看Cursors,但是不确定它们是否是解决方案。如果可以的话,您能举个例子吗? 问题答案: 当一个不可变集合中的一个对象发生更改时,是否可以自动更新所有相关对象? 简短答案 没有。 长答
关系定义了两个实体之间的关联方式。在关系数据库中,关系表现为外键约束。 注意 本文中的大部分样例使用了一对多的关系来展示相关概念。查看文末的 其他关系模式 可以了解一对一和多对多关系。 术语定义 描述关系需要用到大量术语 依赖实体:包含外键属性的实体。有时被称作关系中的“子”。 主实体:包含主键/替代键(备用关键字)属性的实体。有时被称作关系中的“父”。 外键:依赖实体中用于存储关联实体的主键属性
Object Name Description backref(name, **kwargs) 使用显式关键字参数创建反向引用,这些参数与可以发送到的参数相同 relationship() . dynamic_loader(argument, **kw) 构造动态加载映射器属性。 foreign(expr) 用“foreign”批注对primaryjoin表达式的一部分进行批注。 relation
我正在开发一个Struts2+Hibernate+Spring应用程序。我试图将用户权限加载到我的会话中,以便将它们恢复到特定的JSP中。 工作流程如下: 用户登录 Hibernate热切地加载了用户组 出什么事了?我是在用Hibernate还是Spring做错了什么?