当前位置: 首页 > 知识库问答 >
问题:

关系Hibernate

公孙宏畅
2023-03-14

孩子:@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出了什么问题。谢谢你的回答。

共有2个答案

宫铭
2023-03-14

JOIN应该在FETCH之前,试试这个查询:

"SELECT child FROM Child child JOIN FETCH child.family WHERE child.family.id = :userId"
燕烨
2023-03-14

首先您需要更改查询

@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做错了什么?