Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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
C# 在hbm文件中编写HQL的优点是什么?_C#_Nhibernate - Fatal编程技术网

C# 在hbm文件中编写HQL的优点是什么?

C# 在hbm文件中编写HQL的优点是什么?,c#,nhibernate,C#,Nhibernate,我是这样在hbm文件中编写HQL的 <query name="GetFabric"> <![CDATA[Select F.FabricName,FS.FabricSeasonName from Fabric F,FabricSeason FS where F.FabricSeasonID=FS.ID]]> </query> 但是我们可以在代码文件中编写查询,那么编写HQL(HBM文件或代码文件)的更好方法是什么呢?如果需要在单个函

我是这样在hbm文件中编写HQL的

<query name="GetFabric">
        <![CDATA[Select F.FabricName,FS.FabricSeasonName from Fabric F,FabricSeason FS where F.FabricSeasonID=FS.ID]]>
    </query>


但是我们可以在代码文件中编写查询,那么编写HQL(HBM文件或代码文件)的更好方法是什么呢?

如果需要在单个函数中执行查询,我会将其嵌入代码中,但是,如果我需要在不同的项目/类中运行此查询,则会将其放入hbm.xml

如果需要在单个函数中执行查询,则我会将其嵌入代码中,但是如果我需要在不同的项目/类中运行此查询,则会将其放入hbm.xml中。放置在Hibernate映射文件中的命名查询是:

  • 比分散在Java代码中的查询更易于维护
  • 全局可访问,因此您可以一次性定义查询,并在代码中多次使用它
  • 更安全的是,它们可以防止SQL注入攻击

放置在Hibernate映射文件中的命名查询是:

  • 比分散在Java代码中的查询更易于维护
  • 全局可访问,因此您可以一次性定义查询,并在代码中多次使用它
  • 更安全的是,它们可以防止SQL注入攻击

我将HQL嵌入HBM文件的主要原因很简单:-

在构建会话工厂时,HQL元数据被解析/检查/缓存


这意味着,如果您有错误,您将在代码启动时知道这些错误。此外,HQL已缓存并准备运行。在代码中使用HQL意味着在第一次运行HQL时需要对其进行解析和缓存,因此第一次运行的代码会稍微慢一些。

我将HQL嵌入
HBM
文件的主要原因很简单:-

在构建会话工厂时,HQL元数据被解析/检查/缓存


这意味着,如果您有错误,您将在代码启动时知道这些错误。此外,HQL已缓存并准备运行。在代码中使用HQL意味着在第一次运行HQL时,需要对其进行解析和缓存,因此第一次运行的代码会稍微慢一些。

这三个答案对于代码中的HQL也是正确的。我想知道为什么它们更安全?它们对于SQL注入来说更安全,几乎与存储过程一样……好吧,请理解,您不能在嵌入映射文件中从ClassA编写
,其中id='+id
。这三个答案对于代码中的HQL也是正确的。我想知道为什么它们更安全?它们对于SQL注入来说更安全,几乎与存储过程一样……好吧,请理解,您不能从ClassA中编写
,其中id='+id
在嵌入式映射文件中