1

假设我有以下类层次结构:

interface Client:
    String name
    String country

class RegisteredClient implements Client:
    String assignedId

class UnregisteredClient implements Client

class ClientRisk:
    Client client
    int riskLevel

这个想法是ClientRisk可以链接到具有 id 的注册客户端(这是自定义的并且来自其他地方),或者一些自定义客户端(未注册)。现在存在以下数据库结构:

REGISTERED_CLIENT(ASSIGNED_ID, NAME, COUNTRY)
CLIENT_RISK(REG_CLIENT_ID, UNREG_NAME, UNREG_COUNTRY, RISK_LEVEL)

我用 Hibernate 映射了这些实体,例如在 中有两个隐藏字段ClientRisk,一个是引用RegisteredClient,另一个UnregisteredClient是映射为组件。我添加了一个属性client,在运行时区分这两个字段。

这是一种丑陋的解决方案,并且无法扩展(例如,我不能只写client.name标准或 HQL)。另一方面,我不想将未注册的客户放到另一个表中,因为它是自定义的,无论如何都不会共享。我也不想映射UnregisteredClient为基于CLIENT_RISK表的实体,这会导致不必要的连接(CLIENT_RISK JOIN CLIENT_RISK)。

我的问题是,在 Hibernate 中处理这种情况的最佳方法是什么?

4

0 回答 0