【问题标题】:SQLGrammar error when querying MySql view查询 MySql 视图时出现 SQLGrammar 错误
【发布时间】: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 列。
  • 我不会打扰视图。我看不出它的意义。

标签: mysql hibernate spring-boot view


【解决方案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 .. 的条件。

【讨论】:

    猜你喜欢
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 2020-07-30
    相关资源
    最近更新 更多