У меня есть эти 2 класса:JPA одна таблица наследования не может загрузить правильный объект
@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 должно быть значением столбцов дискриминатора.
Любая идея, как исправить проблему?
Сердечные приветы Massimo
Сообщите, что ошибка возникает. – Marthin
Ошибка - это логика. Клиент cliente = entityManager.find (Cliente.class, clienteId) не возвращает правильный элемент, так как условие ввода помещается в столбец дискриминатора со значением, жестко закодированным суперклассом. И (COD_TIPOCLIENTE =?) = PF –