代码之家  ›  专栏  ›  技术社区  ›  Hamvy B

替换不推荐的hibernate方法

  •  0
  • Hamvy B  · 技术社区  · 2 年前

    不赞成使用会话接口方法createQuery(StringqueryString)。为什么它被弃用?它已经过时了,但没有人提出替代它。是否有类似的方法使用字符串HQL进行删除操作。

    对于删除/更新/插入操作,它可以正常工作,但被标记为不推荐使用

    2 回复  |  直到 2 年前
        1
  •  1
  •   lance-java    2 年前

    请参阅 javadocs 哪个州

    已弃用。使用createQuery(String,Class), createSelectionQuery(java.lang.String)或createMutationQuery(String) 取决于意图

    对于插入/更新/删除(例如用于变异操作),您应该使用 Session.createMutationQuery(String)

        2
  •  0
  •   lance-java    2 年前

    您是否考虑过使用 @NamedQuery ?

    @Entity
    @NamedQueries({
       @NamedQuery(
          name = "person.findByNameLike", 
          query = "from Person where name like :name"
       ),
       @NamedQuery(
          name = "person.deleteByNameLike", 
          query = "delete from Person where name like :name"
       )
    })
    public class Person {
        @Id
        private long id;
    
        private String name;
    }
    
    public class PersonDao {
        private final Session session;
    
        public PersonDao(Session session) { this.session = session; }
    
        public List<Person> findByNameLike(String name) {
            Query<Person> query = session.createNamedQuery("person.findByNameLike", Person.class);
            query.setParameter("name", "%" + name + "%");
            return query.list();
        }
    
        public int deleteByNameLike(String name) {
            MutationQuery query = session.createNamedMutationQuery​("person.deleteByNameLike");
            query.setParameter("name", "%" + name + "%");
            return query.executeUpdate();
        }
    }
    

    看见 https://www.baeldung.com/hibernate-named-query