【发布时间】:2012-06-09 14:51:15
【问题描述】:
我有一个域对象
@Entity
@Table (name = "vw_t_bucket")
public class TBucket {
....
@ManyToOne (cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.EAGER, targetEntity = Prd.class)
@JoinColumns({
@JoinColumn(name = "key", referencedColumnName="key"),
@JoinColumn(name = "cdate", referencedColumnName="cdate")
})
public IPrd getPrd() {
return prd;
}
....
@ManyToOne (cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.EAGER, targetEntity = Acct.class)
@JoinColumn (name = "acct", nullable = false)
public IAcct getAcct() {
return acct;
}
}
@Entity
@Table (name = "product")
public class Prd implements IPrd {
...
}
@Entity
@Table (name = "vw_acct")
public class Acct implements IAcct {
...
}
如您所见,TBucket 是一个视图,并且连接到表 (product) 和另一个视图 (vw_acct)
我的数据库告诉我,视图和表的连接性能不佳,我需要将视图更改为表。
但是,视图本身是由多个表的连接组成的。
我的领导想知道是否有一种解决方案,我们可以将连接 sql 直接放在注释中,我告诉他我们只能将表/视图用于与域对象的映射。
我想知道这个问题是否有任何可能的解决方案。
【问题讨论】:
-
视图和表之间的连接没有理由必然表现不佳。也许这些特定的连接会表现不佳(我假设这就是您的 DBA 的意思),但这与您正在连接视图和表这一事实无关。
-
我同意 Todd 的观点,并建议调查和了解当前查询的具体性能问题。在 Oracle 中,您需要阅读使用 EXPLAIN PLAN 来理解并将其应用于相关查询。
-
引用 DBA -“我们也有与其他表/视图连接的视图。我们应该只有表到表连接或从视图中简单选择。”
标签: hibernate jakarta-ee join hibernate-mapping