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



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

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

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

@MappedSuperclass
public class Campaign {
@ManyToOne
private long businessId;
/...
}

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

另外,我不知道我是否错了。如果我必须持有一个BusinessUser对象,它将包含一个BusinessData对象,该对象将包含Campaign对象的ArrayList,其中将包含另一个BusinessUser,依此类推......还是我错误地认为这是一个永无止境的循环?

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

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

这意味着它可能包含没有BusinessDataBusinessUser。 所以循环到此停止。

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

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

理论上,你可以编写一个像这样的 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

这将为您提供ArrayList<Campaing>中包含的所有BusinessUser的结果,这些等于所选BusinessUser

没有错,这可能是需要考虑的事情。

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

@MappedSuperclass
public class Campaign {
@ManyToOne
private BusinessUser businessUser;
/...
}

注意private BusinessUser businessUser;

@Join 列(name="reference_column_name")注释可以在从其他实体引用的类的属性或字段上方使用。

最新更新