是否可以使用hibernate注释映射外键?

时间:2016-06-17 00:33:44

标签: java database hibernate annotations foreign-keys

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

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

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

@MappedSuperclass
public class Campaign {

    @ManyToOne
    private long businessId;
    /...
}

有没有办法可以将值businessId映射到businessId类中的BusinessUser,而不必让Campaign持有BusinessUser个对象?或者我应该只添加一个BusinessUser对象并以这种方式映射外键?

另外,我不知道我是否错了。如果我必须持有BusinessUser对象,它将包含一个BusinessData对象,该对象将包含ArrayListCampaign个对象,其中包含另一个BusinessUser个对象df = df.groupby(['ticker']) 等等......或者我认为这是一个永无止境的循环我错了吗?

2 个答案:

答案 0 :(得分:0)

@Join column(name =&#34; reference_column_name&#34;)注释可以在从某个其他实体引用的类的属性或字段上方使用。

答案 1 :(得分:0)

是的,你错误正确认为这是一个永无止境的循环,

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

这意味着它可能包含没有BusinessUser的{​​{1}}。所以循环停在这里。

但如果BusinessData中的ArrayList<Campaign>包含BusinessData BusinessUser,那么你是对的。

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

理论上你可以写一个这样的SQL:

BusinessData

这将为您提供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;注意!