2012-01-13 3 views
0

Я использую hibernate в качестве провайдера переносимости JPA и не смог найти способ обработать исключения данных в документации.Обработка исключений данных с сохранением JPA 2

У меня есть две сущности:

@Entity 
public class Item { 
    @Id 
    @GeneratedValue 
    Long id; 

    @ManyToOne 
    @JoinColumn(name="node_id") 
    Node node; 
    .. snip .. 
} 

@Entity 
public class Node { 
    @Id 
    @GeneratedValue 
    Long id; 

    @OneToMany 
    @JoinColumn(name="node_id") 
    List<Item> items; 
    .. snip .. 
} 

В моей базе данных, однако, у меня есть исключение данных, где есть элемент строки, с node_id = X, но ни один узел с idX.

Я не могу очистить эти данные для раздражающих, несвязанных причин.

Есть ли способ, которым я могу настроить JPA, чтобы не взорваться, когда он попадает в эти данные?

+0

Это показывает отсутствие согласованности в вашей базе данных. В этой колонке должно быть ограничение ограничения ключа, что гарантировало бы, что эта ситуация никогда не произойдет. Если очистка данных (что означает выполнение простого SQL-запроса), на самом деле не вариант, то используйте ответ Алекса. Но вы должны очистить его и добавить ограничение FK. –

+0

К сожалению, есть веские причины, по которым в этом случае я не могу очистить эти данные. Как я уже сказал, это раздражает. – idbentley

ответ

0

Ну, вы не можете задушить исключение JPA. Однако вы можете создать объект слушатель, ожидающий объект сохранения/обновления и кэша и сделки с какими-либо исключениями, которые могут исходить от них:

http://docs.oracle.com/cd/B31017_01/web.1013/b28221/cmp30cfg015.htm

+0

Я не беспокоюсь о сохранении объекта, я беспокоюсь о его загрузке. – idbentley

1

Вы можете использовать @NotFound (Ignore) аннотацию на вашей собственности , Javadoc here

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