我想在我的repo中写一个本机查询“Select*in from table”。表名与实体名不同。
运行查询时,
1如果我把实体名称返回表未找到。
2如果我将表名放在查询中,则查询的验证失败。
问题是
@Transactional
@Query(
value = "Select * from " +
"TariffPacks r2 where r2.TariffID = :tariffId " +
"and r2.regionname = :regionname " +
"and r2.category = :category " +
"and r2.amount = :amount " +
"and r2.operator = :operator", nativeQuery = true
)
List<TariffPacks> findByTariffID_RegionName_Category_Amount_Operator(
@Param("tariffId") Long tariffId,
@Param("regionname") String regionname,
@Param("category") String category,
@Param("amount") Integer amount,
@Param("operator") String operator
);
@Transactional
@Modifying
@Query(
value = "Delete from " +
"TariffPacks r2 where r2.TariffID = :tariffId " +
"and r2.regionname = :regionname " +
"and r2.category = :category " +
"and r2.amount = :amount " +
"and r2.operator = :operator"
)
List<TariffPacks> deleteByTariffID_RegionName_Category_Amount_Operator(
@Param("tariffId") Long tariffId,
@Param("regionname") String regionname,
@Param("category") String category,
@Param("amount") Integer amount,
@Param("operator") String operator
);
如果我使用"Select*from TariffPacks r2..., nativeQuery=true",我得到错误TariffPacks不存在。如果我使用"Select*from RECHARGEDATAPACKS r2..., nativeQuery=true",我在Hibernate中得到验证错误。
实体:
import lombok.*;
import javax.persistence.*;
import java.time.LocalDateTime;
@Data
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "RECHARGEDATAPACKS")
public class TariffPacks {
@Id
@GeneratedValue(generator = "RECHARGEDATAPACKS_SEQ")
@SequenceGenerator(name = "RECHARGEDATAPACKS_SEQ", sequenceName = "RECHARGEDATAPACKS_SEQ", allocationSize = 1)
// @GeneratedValue(strategy = GenerationType.AUTO)
private Long packid;
private Long TariffID;
private String operator;
private String operatoralias;
private String regionname;
private String regionalias;
private String category;
private Integer amount;
private String talktime;
private String validity;
private String description;
private String billercategory;
private String updatedOn;
private String entryDate;
}
我有三个问题:1如何使Hibernate寻找表名称(RECHARGEDATAPACKS),同时使用nativeQuery=true?
2我可以在Hibernate中写入“Select*”而不使用nativeQuery=true吗?我想我必须写所有的列名,比如TariffId、Operator、region..,但我希望返回实体。如何将所有列映射到输出中的实体?
3还有其他方法可以编写单独的列名并将其映射到实体类吗?就像如果我写选择TariffId,操作员,区域...,我如何直接获取TariffId?
使用本机查询时,必须使用表名,而不是实体名。您还必须使用数据库列名,而不是java字段名。
当使用非本机查询(称为JPQL或在hibernate中特别是HQL)时,必须使用实体和字段名。而不是select*from Entity e…
语法是select e from Entity e…
。
1如果我把实体名称返回表未找到。
如果您使用的是nativeQuery=true,则必须写入表名。
@Transactional
@Query(value = "Select * from " + "RECHARGEDATAPACKS r2 where r2.TariffID = :tariffId "
+ "and r2.regionname = :regionname " + "and r2.category = :category " + "and r2.amount = :amount "
+ "and r2.operator = :operator", nativeQuery = true)
List<TariffPacks> findByTariffID_RegionName_Category_Amount_Operator(@Param("tariffId") Long tariffId,
@Param("regionname") String regionname, @Param("category") String category, @Param("amount") Integer amount,
@Param("operator") String operator);
2如果我将表名放在查询中,则查询的验证失败。
我尝试了相同的代码,效果很好。请指定确切的错误/异常。
1如何使Hibernate查找表名(RECHARGEDATAPACKS)而使用nativeQuery=true?
如果使用nativeQuery=true,那么您必须只提供表名,否则您可以使用实体类名编写HQL/JPQL。
2我可以在Hibernate中写入“Select*”而不使用nativeQuery=true吗?我想我必须写所有的列名,比如TariffId、Operator、region..,但我希望返回实体。如何将所有列映射到输出中的实体?
你可以这样写:
@Query(value = "from " + "TariffPacks r2 where r2.TariffID = :tariffId " + "and r2.regionname = :regionname " + "and r2.category = :category " + " and r2.amount = :amount " + "and r2.operator = :operator")
3还有其他方法可以编写单独的列名并将其映射到实体类吗?就像如果我写选择TariffId,操作员,区域...,我如何直接获取TariffId?
您可以这样做:
@Query(value = "select TariffID, category from RECHARGEDATAPACKS where packid = :packid", nativeQuery = true)
List<Object[]> someMethodName(Long packid);
然后你可以提取。
问题内容: 我在Oracle中有一个表,其中SC_CUR_CODE列为CHAR(3) 当我做: 我看到了,而不是和 是一个java.lang.Character 我怎样才能得到充分的价值和? 问题答案: 似乎Hibernate读取类型为的值。尝试将其转换为: 通过接口使用Hibernate时,您可以改为设置一个结果类型(也可以通过JPA 2.0 访问): 从HHH-2220开始,Hibernate
问题内容: 我有一个关于Hibernate缓存机制的问题。我在文章中已经读到,在hibernate中执行本机SQLquery会使缓存的所有区域无效,因为hibernate不知道它将影响哪个特定实体。在这里,缓存的所有区域都是在讨论二级缓存或二级缓存(一级缓存,二级缓存)或仅二级缓存或仅一级缓存的各个区域吗? 问题答案: 该文章介绍了Hibernate的查询缓存是如何工作的,并原生查询的在现有的高速
我需要通过在Hibernate中执行本机查询获得结果集。虽然我使用的是EntityManager,但查询和结果集可能不是实体。 当我尝试下面的代码时,我得到了一个结果。因为我要求的是一个有值的结果。(Hibernate JPA) 结果是:爱丽丝 当我试图从相同的代码中获得多个select out(查询为select name)时,指定来自fresher_test(其中id=1) 这有一种方法,我可
我写了原生sql查询,而不是使用hql和面对roblem 超出声明序数参数的位置。记住序数参数是基于1的!职位: 1 和DAO 我读了和hibernate使用0作为第一个索引。 堆栈跟踪 //更新 有趣的是,当我设置查询数值时 我明白了 但是在MySQL中我得到了成功的结果。 我如何决定这个问题?
问题内容: 我正在使用Hibernate / JPA执行本地PostGIS查询。这些查询的问题在于它们需要的参数不是经典的X =“值”形式。 例如,以下几行崩溃 但是,以下查询有效: (但是它很容易出现SQL注入…) 有谁知道如何在这种情况下使用? 问题答案: 未为本机查询定义使用命名参数。根据JPA规范(第3.6.3节“ 命名参数”): 命名参数遵循第4.4.1节中定义的标识符规则。命名参数的使
问题内容: 我尝试将以下代码添加到spring数据jpa存储库中: 但是应用程序不能以以下例外开头: 由以下原因引起:org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:第1行第59列附近的值[插入commit_activity_link(commit_id,activity_id)VALUES(?1,?2)] 我哪里错了? 问题答案: