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

如何使用spring JPA(Hibernate)映射多个表,引用基于类型和ID的一个表?

白修谨
2023-03-14

我有一个传统的数据库设计,其中表a、B、C以id作为主键,它们都与表D有一对多的关系。表D以linkable_type和linkable_id作为这些表(即a、B、C)的连接条件。

@ManyToOne
@JoinColumn(name="LINKABLE_ID", referencedColumnName="ID")
@WhereJoinTable(clause = " LINKABLE_TYPE = 'A' ")
private A a;

//bi-directional many-to-one association to TrainRoute
@ManyToOne
@JoinColumn(name="LINKABLE_ID", referencedColumnName="ID")
@WhereJoinTable(clause = " LINKABLE_TYPE = 'B' ")
private B b;
@ManyToOne
@Any(metaColumn = @Column(name = "LINKABLE_TYPE"))
@AnyMetaDef(idType = "long", metaType = "string",
        metaValues = {
                @MetaValue(targetEntity = A.class, value = "A"),
                @MetaValue(targetEntity = B.class, value = "B"),
                @MetaValue(targetEntity = C.class, value = "C")
        })
@Cascade( { org.hibernate.annotations.CascadeType.ALL})
@JoinColumn(name = "LINKABLE_ID", referencedColumnName = "ID")
@JsonProperty("linkable_id")
private E e;
    public interface E {}

并在子类A、B、C中实现,但这不允许在类A中以反向关系包含@OneTomany,类A可以包含D的列表。

      @OneToMany
      private List<D> d;

有谁能帮助我如何在Spring JPA中使用Hibernate映射这些关系吗?

共有1个答案

归和惬
2023-03-14

我们通过以下方法解决了这个问题:我们将@OneTomany对象设置为@Transient并在保存父对象之后手动保存该对象。这样我们就有了两个可用于映射的密钥。

在fetch部分中,我们可以在两列上都使用JPQL。

 类似资料:
  • 我有两个这样的等级: 和 我想使用hibernate持久化这两个类。字段messagesOfTypeA、messagesOfTypeB和messagesOfTypeC根据消息中的类型字段对消息对象进行分组。 如何使用XML hibernate映射映射MyClass和Message之间的一对多关系?(我正在使用Hibernate 3.6)

  • 问题内容: 我需要将两个表映射到一个类,但很难弄清楚。一个表是ROOMS,另一个表是TRAINERS。 ROOMS表: 培训人员表: 表应当加入了,和。 ROOMS表的主键是:。TRAINERS表的主键是:。 我需要通过查询这个数据,,,,和。 在SQL中,可能类似于: 我正在项目中其他地方使用ROOMS表,它已经映射为独立对象。是否有一种方法可以将其用作TRAINERS对象的子对象,或者将这两个

  • 问题内容: 我必须制作一个拼贴项目的域层。我们几乎没有标准,例如我们必须使用Hibernate,数据库也已修复。 数据库的相关部分几乎如下所示: 总线实体 (表1) 总线编号 公交专用信息 总线类型 (表2) BusTypeId 座位数 … 子类鉴别器 我遇到的问题是,在域层中有2种类型的总线通过BusType表中的标识符进行区分: 有没有办法用Hibernate和JPA映射类似的东西?谢谢你的回

  • 我正在学习Hinbernate,所以如果我能将两个类映射到一个DB表,我的想法就被忽略了。 Ex: 虽然这两个类都映射到一个表,但让我们用字符串数据类型的一列来命名Employee。 Hibernate是否能够根据我用于创建的类在表中创建行。还是您认为应该有一个鉴别器列来区分类? 注意:类之间没有继承关系,它们是独立的。

  • 问题内容: 我有三个类User,Order和Project,它们存储在单个表中。订单和项目都与用户具有:n关系。为了实现这一点,我有两个映射这些关系的交叉表(UserOrders,UserProjects)。 如您所见,User对象包含每个相关的orderID / projectID的列表。 现在,我想用Dapper进行查询。我有这个解决方案,可以很好地处理 一个 列表。但是,如果我尝试为第二个列

  • 我有三个表:用户,角色,董事会。每个用户可以有多个板,但在一个板中用户只能有一个角色。我创建了三个类并添加了注释: Hibernate创建一个新表,如下所示: 我使用的是hibernate 4.2.2。