Hibernate 通过同一表中的两列连接表
我有下表Hibernate 通过同一表中的两列连接表,hibernate,hibernate-mapping,Hibernate,Hibernate Mapping,我有下表 +---------------------------------------+ | Company | +------+-------+--------------+---------+ | id |user_id|company_parent| name | +------+-------+--------------+---------+ | COIE | 1 | null | com
+---------------------------------------+
| Company |
+------+-------+--------------+---------+
| id |user_id|company_parent| name |
+------+-------+--------------+---------+
| COIE | 1 | null | company |
+------+-------+--------------+---------+
| AGCY | 1 | COIE | agency |
+------+-------+--------------+---------+
| COIE | 2 | null | company |
+------+-------+--------------+---------+
基本上,每个公司都有一组代理,每个代理都有一个母公司(如果母公司为空,则company\u parent列的值),id和user\u id都是主键,但在我的映射中,我只宣布id为@id(因为我后来添加了user_id作为主键,而使用复合键添加新类真的很痛苦)
因此,我想为每个公司创建一个子列表,以获取其相关机构,同时使用user\u id列和company\u parent列。
以下是我当前的映射:
@ManyToOne
@JoinColumn(name = "company_parent")
@NotFound(action = NotFoundAction.IGNORE)
private Company parentCompany;
@OneToMany(mappedBy = "parentCompany")
@NotFound(action = NotFoundAction.IGNORE)
private List<Company> agencies;
但是我得到:列的编号错误。应该是1
我如何才能做到这一点?我所知道的对注释执行此操作的唯一方法可能是利用特定于Hibernate的
@Filter
和@FilterDef
来根据代理列表上的状态应用过滤器
一种可移植的方法是简单地将列表机构
制作成一个临时列表,在获取公司
实体后,您的业务逻辑将填充该临时列表。您的获取可以使用所需的用户id
和公司父级
限制,而无需担心映射
由于字段是暂时的,并且访问它就像它是hibernate映射的属性一样,您可以在开发的后期轻松地采用复合键更改,并简单地删除额外的获取以支持映射更改。从业务代码中,它应该像使用暂时方法一样进行操作
@ManyToOne
@JoinColumns({
@JoinColumn(name = "company_parent"),
@JoinColumn(name = "user")
})
@NotFound(action = NotFoundAction.IGNORE)
private Company parentCompany;