Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在SpringHibernate中,有没有任何方法可以用来运行作为字符串传递的自定义SQL查询?_Java_Sql_Spring_Hibernate - Fatal编程技术网

Java 在SpringHibernate中,有没有任何方法可以用来运行作为字符串传递的自定义SQL查询?

Java 在SpringHibernate中,有没有任何方法可以用来运行作为字符串传递的自定义SQL查询?,java,sql,spring,hibernate,Java,Sql,Spring,Hibernate,我不熟悉spring框架和hibernate。我学习了HibernateTemplate类函数,如save()、update()、delete()、load()、loadAll()等。在所有这些函数中,我们只读取、更新、删除、更新函数。在SpringJdbc中,我们还可以使用query或execute等函数执行自定义SQL查询(作为字符串),但在hibernate with spring中,我看不到任何可以用来运行自定义查询并将结果作为持久对象列表的方法。 在SpringHibernate中有什

我不熟悉spring框架和hibernate。我学习了HibernateTemplate类函数,如save()、update()、delete()、load()、loadAll()等。在所有这些函数中,我们只读取、更新、删除、更新函数。在SpringJdbc中,我们还可以使用query或execute等函数执行自定义SQL查询(作为字符串),但在hibernate with spring中,我看不到任何可以用来运行自定义查询并将结果作为持久对象列表的方法。
在SpringHibernate中有什么方法可以做到这一点吗?

hibernate只是一个ORM实现。ORM=对象关系映射

因此,Hibernate只执行创建它的目的。创建java对象和数据库对象之间的链接

另外,Hibernate只是Spring默认使用的一个实现。您还可以选择另一个实现。通常调用spring方法,然后由Hibernate执行

如果您使用SpringJPA,您可以找到许多方法来实现这一点。其中之一是存储库中的本机查询

范例

@Repository
public interface CarRepository extends CrudRepository<Car, Long>, PagingAndSortingRepository<Car, Long> {
 
    @Query(value="select * from car a where a.model= :model", nativeQuery=true)
    List<Car> getCarsByModel(String model);
}
@存储库
公共接口CarRepository扩展了crudepository、paging和sortingrepository{
@查询(value=“select*from car a,其中a.model=:model”,nativeQuery=true)
列出getCarsByModel(字符串模型);
}

是的,就像布格说的那样,你可以定制并使用许多不同的方法。 您还可以在实体顶部创建NamedQuery,如下所示:

@NamedQuery(
            name = "EntityA.findAllWithName",
            query = "SELECT a FROM EntityA a where a.name= :name")
@Entity
public class EntityA{

  @Id  
  private UUID id;
  private String name;
}
然后,您可以在任何需要的地方使用它,如:

public void method(String name){
  Query query=entityManager.createNamedQuery(EntityA.findAllWithName);
  query.setParameter("name",name);
  
  List<EntityA> results=quety.getResultList();
}
public void方法(字符串名称){
Query Query=entityManager.createNamedQuery(EntityA.findAllWithName);
query.setParameter(“name”,name);
List results=quety.getResultList();
}

Hi@Michael,你能给我一个指向资源的链接,让我更好地理解它吗?当然,请查看此链接:但你可以找到许多其他方法,这是主题之一,也可以查看QueryDsl->