JPA单表继承无法加载正确的对象

时间:2012-02-03 15:54:17

标签: inheritance jpa single-table-inheritance

我有这两个班级:

@Entity
@Table(name = "S_MC_CC_CLIENTI")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="COD_TIPOCLIENTE")
@DiscriminatorValue("PF")
public class Cliente implements Serializable {
...
}

@Entity
@DiscriminatorValue("PM")
public class ClienteMinore extends Cliente {

    @Override
    public String toString() {
        return new ToStringCreator(this).append("cliente=" + super.toString()).toString();
    }
}

此测试尝试加载对象。

@Test
    public void testGetItemPersonaFisica() {
        EntityManager entityManager = factory.createEntityManager();
        entityManager.getTransaction().begin();

        Cliente.ClienteId clienteId = new Cliente.ClienteId(codiceAbi, btUtenteProfilo);        

        Cliente cliente = entityManager.find(Cliente.class, clienteId);
        assertNotNull(cliente);
        System.out.println(cliente);
        System.out.println(cliente.getTipologiaCliente());

    }

第一次测试:在COD_TIPOCLIENTE = PF的记录的数据库上,一切都很好。 但是当我用COD_TIPOCLIENTE = PM更改值时,我收到错误,因为从JPA触发的查询是:

SELECT * FROM S_MC_CC_CLIENTI WHERE (((COD_ABI = ?) AND (ANAG_UTENTE = ?)) AND (COD_TIPOCLIENTE = ?))
bind => [01025, 71576493, PF]

似乎生成的查询是错误的,因为密钥是[01025,71576493],而PF应该是鉴别器列的值。

知道如何解决这个问题吗?

亲切的问候 马西莫

1 个答案:

答案 0 :(得分:0)

我发现了问题。我忘了在持久性单元描述符中插入子类引用。

现在一切都很棒。

的Massimo