2016-07-27 1 views
2

У меня есть встроенный составной ключ, который состоит из двух колонокHibernate 5.x удалить запись на основе неполного составного идентификатора?

@Embeddable 
public static class PK implements Serializable { 

    private static final long serialVersionUID = 4049628068378058196L; 

    @Column(name="colA", length=32, nullable=false) 
    private String colA; 

    @Column(name = "colB", length=32, nullable=false) 
    private String colB; 

    //constructors/getters/setters 
} 

Есть ли способ, что я могу удалить постоянный объект, используя только colB значения, например

Serializable id = new String(myColBValue); 

Object persistentInstance = session.get(MyObject.class, id); 
if (persistentInstance != null) { 
      session.delete(persistentInstance);  
} 

или мне придется прибегнуть к используя инструкцию HQL?

ответ

1

Если вам нужно 2 столбца для идентификации MyObject, то предоставления только одного будет недостаточно для поиска уникального результата каждый раз. Ни Session, ни EntityManager не предоставляют метод, который вы ищете. Вам нужно будет с Criteria или Query.

+0

в порядке, но как удалить с помощью hql сейчас? PK - это частный объект в объекте объекта. Кажется, он не может разрешить столбец. Hibernate 5 действительно больше проблем, чем работа с отсутствием документации. session.createQuery ("удалить из MyObject, где PK.colB =: colb") \t \t \t \t \t \t \t \t \t .setParameter ("colb", "Foobar") \t \t \t \t \t \t \t \t \t .executeUpdate(); приводит к ошибке «не может выполнить оператор» –

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