查询 MySql 视图时出现 SQLGrammar 错误

Posted

技术标签:

【中文标题】查询 MySql 视图时出现 SQLGrammar 错误【英文标题】:SQLGrammar error when querying MySql view 【发布时间】:2018-09-18 09:38:06 【问题描述】:

当运行 GET 请求时,即使我已配置在实体类中正确字段。我有一个查询 mysql 数据库视图的 Spring Boot SOAP 接口。我已将父表中的一个唯一键指定为 JPA 中的视图 ID。

我的实体类的一部分有:

@Entity
@Table(name="disbursement_payload")

public class Disbursement 
@Id 
@Column(name="ID")
private long disbursementId;

@Column(name="ReasonType")  
private String reasonType;
public long getDisbursementId() 
    return disbursementId;

public void setDisbursementId(long disbursementId) 
    this.disbursementId = disbursementId;
public String getReasonType() 
    return reasonType;

public void setReasonType(String reasonType) 
    this.reasonType = reasonType;

我的看法是:

CREATE VIEW disbursement_payload AS (
  SELECT 
   iso_number AS Currency,
trans_desc AS ReasonType,
account_number AS ReceiverParty,
amount AS Amount
  FROM m_payment_detail, m_loan_transaction 
  WHERE m_payment_detail.`id`= m_loan_transaction.`payment_detail_id` AND 
m_payment_detail.`payment_type_id`=2
); 

在实体或视图定义中是否缺少某些内容?我已经阅读了could not extract ResultSet in hibernate 此处的其中一个 cmets,我可能必须明确定义父模式。任何帮助,不胜感激。

【问题讨论】:

当你从两个表中选择时,使用JOIN是更好的选择 您的视图中似乎没有 reason_type 列。 我不会打扰视图。我看不出它的意义。 【参考方案1】:

基于下划线_分隔名称的驼峰式转换对db列和类var名称进行映射

你可以试试

    CREATE VIEW disbursement_payload AS (
      SELECT iso_number AS currency
      , trans_desc AS reason_type
      , account_number AS receiver_rarty
      , amount AS amount
      FROM m_payment_detail
      INNER JOIN m_loan_transaction 
          ON  m_payment_detail.`id`= m_loan_transaction.`payment_detail_id` 
            AND m_payment_detail.`payment_type_id`=2
    ); 

视图代码是SQL代码,hibernate把视图看成一张表,所以列名的转换规则是一样的

还有一个建议你不应该使用(旧的)隐式连接,基于你应该使用(更新的)explici join sintax .. 的条件。

【讨论】:

以上是关于查询 MySql 视图时出现 SQLGrammar 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 redshift 中查询时出现权限错误

在 SQL Server 2008 中执行视图时出现“超时已过期”错误

使用 mysql2 运行大型 INSERT 查询时出现异常

查询mysql数据库时出现ETIMEDOUT错误

尝试在 mysql 中导出查询结果时出现致命错误

在 mysql 中编写此查询时出现问题(在论坛中标记已读消息)