【问题标题】:@ManyToOne mapping without an entity for the intermediate table@ManyToOne 映射没有中间表的实体
【发布时间】:2020-11-05 04:11:02
【问题描述】:

我正在编写一个应用程序,它将查询一个无法更改的大型数据库。

因此,我的应用程序不需要映射所有对象,因为那样既无用又耗时。

那里映射的所有实体都是@Immutable

我遇到了这种关系:

我想映射Order,并让它引用Customer。实际上,它是多对一关系,只是发生在两个 Join 子句之外。

我对@9​​87654326@ 和B 都不感兴趣,因为它们没有传达与我的要求相关的信息。

我想像这样,但我知道语法无效:

@Entity
@Immutable
@Table(name = "Order")
public class Order implements Serializable {
    
   @Id
   @Column(name = "id")
   private Long id;

   @ManyToOne
   @JoinColumns(value = 
              @JoinColumn(table = "R", name = "id", referencedColumnName = "R_id"),
                @JoinColumn(table = "Customer", name = "id", referencedColumnName = "Customer_id")
    )
    private Customer customer;
    
    ... more data and getters/setters omitted ...
}
    
    
@Entity
@Immutable
@Table(name = "Customer")
public class Customer implements Serializable {
    
   @Id
   @Column(name = "id")
   private Long id;
    
    
   ... more data and getters/setters omitted ...
}

有没有一种方法可以做到这一点,而无需为R 创建实体?

编辑:-------------

根据建议,我尝试了以下方法:

@ManyToOne
@JoinTable(name = "R",
     joinColumns = @JoinColumn(name = "id", referencedColumnName = "R_id"),
     inverseJoinColumns = @JoinColumn(name = "id", referencedColumnName = "Customer_id"))
private Customer customer;

但是,我收到以下错误:

Unable to find column with logical name: R_id in org.hibernate.mapping.Table(Order) and its related supertables and secondary tables

【问题讨论】:

    标签: database hibernate jpa spring-data-jpa


    【解决方案1】:

    您可以将@JoinTable 注释用于以下架构。

    这样

    @Entity
    @Table(name = "Order")
    public class Order {
    
        // ...
    
        @ManyToOne
        @JoinTable(
            name = "R",
            joinColumns = @JoinColumn(name = "ord_id"),
            inverseJoinColumns = @JoinColumn(name = "customer_id"))
        private Customer customer;
    
        // ...
    }
    

    但对于您的情况,由于R 中缺少Order 表的外键,因此似乎无法避免对中间表R 使用实体。

    【讨论】:

    • 我试过这个,但我得到一个错误抛出:(我刚刚编辑了帖子以包含这个尝试。知道如何解决这个问题吗?连接表没有通过订单的 id 连接
    • 我已经更正了我的答案。不幸的是,对于您的情况,无法避免将实体用于中间表 R
    猜你喜欢
    • 1970-01-01
    • 2013-08-08
    • 2019-12-22
    • 2022-08-20
    • 2013-03-26
    • 2014-10-21
    • 2013-03-04
    • 2011-11-15
    • 1970-01-01
    相关资源
    最近更新 更多