【问题标题】:Attributes on Many-to-Many relationships (Hibernate)多对多关系的属性(休眠)
【发布时间】:2010-12-01 09:17:48
【问题描述】:

我有实体类 A 和 C。它们映射表 tblA 和 tblC 并且它们之间具有多对多关系,而 tblB 在它们之间进行映射。 tblB 包含 A_ID、C_ID 和 SetDate,最后一个是设置的日期,因此是关系的一个属性。我的问题是,我如何最好地映射这个属性?目前它们未映射,如下所示:

答:

@ManyToMany(targetEntity=C.class, cascade={ CascadeType.PERSIST, CascadeType.MERGE } )
@JoinTable(name="tblB", joinColumns=@JoinColumn(name="A_ID"), inverseJoinColumns=@JoinColumn(name="C_ID") )
private Collection<C> Cs;

C:

@ManyToMany( cascade = {CascadeType.PERSIST, CascadeType.MERGE}, mappedBy = "Cs", targetEntity = A.class )
private Collection<A> As;

我应该如何从中获得 tblB.SetDate?

干杯

尼克

【问题讨论】:

    标签: java hibernate annotations many-to-many attributes


    【解决方案1】:

    据我所知,不可能以这种方式映射,您必须切换到一对多和多对一关系 , 你的 B 在中间。您的日期将是 B 的一个属性。


    由于缺乏进化性,Hibernate 文档建议一般避免多对多,并从一开始就使用这两种关系。

    【讨论】:

    • 您好,感谢您的意见。在像我现在这样映射遗留数据库时,在减少实体类数量的同时避免多对多可能并不总是可行。
    • 我也必须处理遗留数据库的东西!我也同意你减少课程数量的愿望。不过,在这种情况下,如果您需要一个额外的字段,我不确定您是否还有其他选择...
    【解决方案2】:

    【讨论】:

    • 当然我可以添加一个新实体,增加代码量,但我想降低代码级别。如果有任何方法,我更愿意在关系中添加一个属性
    • @niklassaers 我认为没有办法,但如果你明白了,请与我们分享。问候,
    猜你喜欢
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 2015-07-21
    相关资源
    最近更新 更多