我有一个名为BusinessUser的类,它具有一个业务ID,并具有一个名为BusinessData的对象。在BusinessData类中,有一个ArrayListCampaign对象,如下所示:

@Embeddable
@Access(AccessType.FIELD)
public class BusinessData {
    @Transient
    private ArrayList<Campaign> campaigns;
    /...
}


Campaign类中,有一个业务ID,该业务ID应该是引用业务用户表中的业务ID列的外键。

@MappedSuperclass
public class Campaign {

    @ManyToOne
    private long businessId;
    /...
}


有没有一种方法可以将值businessId映射到businessId类中的BusinessUser,而不必让Campaign容纳BusinessUser对象?还是我应该简单地添加BusinessUser对象并以这种方式映射外键?

另外,我不知道我是否错了。如果必须保存一个BusinessUser对象,它将包含一个BusinessData对象,该对象将包含一个ArrayListCampaign对象,该对象将包含另一个BusinessUser,依此类推……还是我认为这是一个永无止境的循环,这是错误的吗?

最佳答案

是的,您认为这是一个永无止境的循环,这是对与错,

这是错误的,因为BusinessData(尽管包含ArrayList<Campaign>)从数据库中获取数据。

这意味着它可能包含一个没有BusinessUserBusinessData。因此循环在这里停止。

但是,如果ArrayList<Campaign>中的BusinessData包含确实具有BusinessUserBusinessData,那您是对的。

也就是说,循环在数据库中是相同的。

从理论上讲,您可以编写如下所示的SQL:

SELECT BU.businessId
FROM BusinessUser BU
INNER JOIN BusinessData BD ON BU.businessId = BD.businessId
INNER JOIN campaigns C ON BD.campaignsId = C.Id
    AND C.businessId = BU.businessId


这将为您提供所有包含在BusinessUser中且与所选ArrayList<Campaing>相等的BusinessUser的结果。

没错,可能要考虑一下。

也就是说,同样,您应该像这样映射Campaign

@MappedSuperclass
public class Campaign {

    @ManyToOne
    private BusinessUser businessUser;
    /...
}


注意private BusinessUser businessUser;

08-05 08:14