2

我并没有真正开始使用实体 bean,但它们现在正盯着我看。

我们有几个相互关联的表,但是没有外键,我们不能添加任何外键。对于这个问题,数据库不能改变,这是不可能的,但作为一个不同的解决方案,我们可能会创建视图。无论如何...

我有 3 张桌子。LOCATION 、 LINKS 和 ENDPOINT 以及额外的盐,我们有一个 LINKS_TYPE 表。

LOCATION 表有一个主键 LOCATIONID,它是一个包含位置 ID 的字符串。

LINKS 表有一个 LINKID 作为主键,一列 LINK_ATTR_VALUE_A 包含 ENDPOINT 的主键,一列 LINK_ATTR_VALUE_B 包含 LOCATION 的主键。包含 LINKS_TYPE 主键的列 LINKTYPEID

ENDPOINT 表有一个主键 POINTID

LINKS_TYPE 有主键 LINKTYPEID 列 LINKTYPEA(定义它链接到的表名的文本字符串) 列 LINKTYPEB(定义它链接到的表名的文本字符串)

现在即使提到了 LINKS_TYPE,我现在也不必担心,因为在这个数据库实例中没有其他链接。

我想在我的 LOCATION 实体 'List endPoints' 中定义一个成员,据我了解,这将是一个 @OneToMany。请记住,这里没有外键可以提供帮助,而且永远不会有。

这是我定义的映射...

@OneToMany ( cascade=CascadeType.ALL)
@JoinTable ( name = "ENDPOINT",
             joinColumns = @JoinColumn ( 
                                name = "LINK_ATTR_VALUE_B"
                            ),
             inverseJoinColumns = 
                            @JoinColumn ( 
                                name = "LINK_ATTR_VALUE_A"
             )
            )
private List<EndPoint> endPoints;

很可能从这里你可能会意识到我不知道我在做什么 :D 但是文档不是太好,我已经订购了一本书以寻求 ejb 3 的帮助,但我只是没有时间在此之前完成这本书映射:D

我们将 TopLink 与 jdeveloper 11g 以及 weblogic 服务器和 oracle 10g 作为数据库一起使用。

当使用 serviceFacade 客户端进行查询时,一切似乎都正确(从那时起工作区就死了,我必须重新创建项目才能让客户端正常工作)。在我看来,它会生成完美的查询来检索正确的数据。然而,它以没有结果而告终。

我愿意提供尽可能多的信息,只是不确定需要什么。但我知道我的映射很可能是错误的,这是因为我不理解映射。

有人可以帮助我吗?

谢谢你。

4

2 回答 2

2

您的LINKS表看起来像LOCATIONENDPOINT之间的多对多映射表,而不是一对多。这里最大的问题是它是否还有除 , 之外的任何其他列LINKIDLINK_ATTR_VALUE_A并且LINK_ATTR_VALUE_B您列出了?

如果是这样,那么您将不得不将其映射为一个单独的实体:
Location将一组Links映射为双向一对多
Link将与两者具有多对一关系,Location并且EndPoint

如果,OTOH,LINKS没有其他列并且您愿意放弃它的主键(这既不需要也不能映射到多对多连接表),那么您可以将其映射为多对多集合EndPointLocation

如果您可以澄清您的问题,我会更新我的答案以包含实际映射(如果您需要)。

于 2009-07-28T17:43:00.657 回答
0

这是我结束的映射。

@OneToMany(cascade=CascadeType.ALL)
@JoinTable(name = "LINK",
    joinColumns = {
            @JoinColumn(name="LINK_ATTR_VALUE_B")
        },
           inverseJoinColumns = {
            @JoinColumn(name="LINK_ATTR_VALUE_A")
           }
)
private List<EndPoint> endPoints;

LINK表中现在确实不需要任何值。但是到时候,我们的 DBA 将需要为我们或其他东西创建物化视图。

但是在尝试映射时,我最初保留了LINK,而不是直接去endPoint。我收到了 5000 多个链接,而这些链接应该只有 133 个。所以还有一个我不明白的映射,但我会留到以后再说。

目前我们的数据库仅包含 1 种链接类型。这会改变,我真的有办法在映射中添加一个额外的 where 子句,所以我可以为不同的类型设置不同的属性映射。

我今天打字的心情:-D

于 2009-07-29T15:29:05.750 回答