2012-02-03 2 views
0

У меня есть эти 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

+0

Сообщите, что ошибка возникает. – Marthin

+0

Ошибка - это логика. Клиент cliente = entityManager.find (Cliente.class, clienteId) не возвращает правильный элемент, так как условие ввода помещается в столбец дискриминатора со значением, жестко закодированным суперклассом. И (COD_TIPOCLIENTE =?) = PF –

ответ

0

Я нашел проблему. Я забыл вставить ссылку подкласса в дескриптор единицы сохранения.

Все отлично работает сейчас.

Massimo

Смежные вопросы