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

Hibernate:从两个可能的位置查询实体的字段?

颛孙兴旺
2023-03-14

是否可以从2个可能的表中获取实体的字段?

例如:

   @Entity
   @Table(name = "TABLE_A")
   public class A{

     @Id
     @Column(name = "ID")
     @GeneratedValue(strategy = GenerationType.AUTO)
     private Long id;
   }

   @Entity
   @Table(name = "TABLE_B")
   public class B{

     @Id
     @Column(name = "ID")
     @GeneratedValue(strategy = GenerationType.AUTO)
     private Long id;
   }

@Entity
@Table(name = "TABLE_PARENT")
public class PARENT{

  // This field needs to be fetched from A table or from B table!!! by some
  // conditions
  @OneToOne
  @JoinColumn(name = "A_B_ID")
  private A a;                     
}

父类中的字段需要根据某些条件从表a或表b中提取!

任何想法都将不胜感激!

澄清:如果父级实际上指向B实例,我不想获取B实例!表每类继承只在A的表中查找,因为我们在父类中指定了his字段的类型!?

你有其他想法吗?

共有2个答案

宗冷勋
2023-03-14

一种解决方案是从公共类继承AB,例如C并在中引用C类。草稿可以是:

@MappedSuperclass
public class AB {
    @Id
    private Integer id;
...
}

@Entity
public class A extends AB {
...
}

@Entity
public class B extends AB {
...
}

@Entity
public class Parent {
    ...
    @Id
    private Integer id;
    @OneToOne
    private AB ab;
}

留档2.2.4.1

顾穆冉
2023-03-14

您可以通过使用hibernate继承功能来实现这一点;这里有一个例子;http://viralpatel.net/blogs/hibernate-inheritance-table-per-concrete-class-annotation-xml-mapping/

 类似资料:
  • JPQl是jpa中的新成员,我想查询两个实体中的所有字段,然后使用实体类getter访问数据。 错误 异常[EclipseLink-0](Eclipse持久性服务-2.5.0.v20130507-3faac2b): org.Eclipse.Persistence.exceptions。JPQLException<br>异常描述:语法错误解析[SELECT u(),f()FROM User u jo

  • 问题内容: 我有的: 我有Hibernate实体,它包含许多非瞬态字段,包​​括集合。用户可以分别更新每个字段或一次更新某些字段。 多么大的挑战: 在处理程序中,我应该检查实体的哪个字段已更改: 出于安全性和通知原因,我想这样做。手段: 并非所有用户都可以修改所有字段 我应该在某些字段更改时以特定方式通知特定用户。 有什么问题: 我得到非常丑陋的代码。实际上,我遍历所有字段/集合和调用方法。 题:

  • 问题内容: 我有一个实体- 。由描述。 Hibernate为每个实体创建一个表,因此当我调用时,我的数据总是保存到该表中。 现在,我需要另一个表来存储相同类型的数据,并且只需要将我的实体保存到该表中。 数据结构 (类似这样): 使用这个 : 和结果,我应该在和 中。 由于系统限制,我无法将这两个对象放在一个表中。(即使创建额外的字段也是个坏主意)。 我可以不进行子类化吗?使用Programmati

  • Hibernate为每个实体创建一个表,因此当我调用时,我的数据总是保存到这个表中。 现在,我需要另一个表来存储相同类型的数据,并且我只需要将我的实体保存到该表中。 数据结构(类似于以下内容): 由于系统的限制,我不能将这两个对象放在一个表中。(即使创建额外字段也是坏主意)。 我可以在不进行子类化的情况下这样做吗?使用programmaticaly hibernate配置?

  • AnsprechPartner Lieferant ansprechpartner.java lieferant.java 在我的AnsprechPartner.java中,我是这样做的: 在我的Lieferanten.java中,我是这样做的:

  • 我写了原生sql查询,而不是使用hql和面对roblem 超出声明序数参数的位置。记住序数参数是基于1的!职位: 1 和DAO 我读了和hibernate使用0作为第一个索引。 堆栈跟踪 //更新 有趣的是,当我设置查询数值时 我明白了 但是在MySQL中我得到了成功的结果。 我如何决定这个问题?