我有一个名为BusinessUser
的类,它具有一个业务ID,并具有一个名为BusinessData
的对象。在BusinessData
类中,有一个ArrayList
个Campaign
对象,如下所示:
@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
对象,该对象将包含一个ArrayList
个Campaign
对象,该对象将包含另一个BusinessUser
,依此类推……还是我认为这是一个永无止境的循环,这是错误的吗? 最佳答案
是的,您认为这是一个永无止境的循环,这是对与错,
这是错误的,因为BusinessData
(尽管包含ArrayList<Campaign>
)从数据库中获取数据。
这意味着它可能包含一个没有BusinessUser
的BusinessData
。因此循环在这里停止。
但是,如果ArrayList<Campaign>
中的BusinessData
包含确实具有BusinessUser
的BusinessData
,那您是对的。
也就是说,循环在数据库中是相同的。
从理论上讲,您可以编写如下所示的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;
!