我正在编写一个将查询无法更改的大型数据库的应用程序。
由于这个原因,我的应用程序不需要映射所有对象,因为那将是无用且耗时的。
其中映射的所有实体均为@Immutable
。
我遇到了这种关系:
我想映射Order
,并使其引用Customer
。实际上,这是一个多对一关系,只是发生了两两个Join子句。
我对R
和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
答案 0 :(得分:0)
对于以下模式,您可以使用@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
中使用实体。