Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.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
JPA+JBOSS Hibernate NamedQuery不使用列名_Hibernate_Jpa - Fatal编程技术网

JPA+JBOSS Hibernate NamedQuery不使用列名

JPA+JBOSS Hibernate NamedQuery不使用列名,hibernate,jpa,Hibernate,Jpa,下面是我的JPA实体的一个片段。当我使用Hibernate DB2方言在JBOSS中运行此查询时,生成的select查询使用的是acctYymm,而不是ACCT_YYMM,从而导致-206异常 @Column(name = "ACCT_YYMM") public String getAcctYymm() { return acctYymm; } SqlSyntaxErrorException:db2sql错误:SQLCODE=-206,SQLSTATE=42703,SQLERRMC=CAR

下面是我的JPA实体的一个片段。当我使用Hibernate DB2方言在JBOSS中运行此查询时,生成的select查询使用的是acctYymm,而不是ACCT_YYMM,从而导致-206异常

@Column(name = "ACCT_YYMM")
public String getAcctYymm() {
  return acctYymm;
}
SqlSyntaxErrorException:db2sql错误:SQLCODE=-206,SQLSTATE=42703,SQLERRMC=CARTUMLERE0.acctymm,DRIVER=3.62.56

我尝试将命名策略更改为EJB3NamingStrategy和DefaultComponentSafeNamingStrategy,它们似乎都没有使用列名。我认为在我实现EmbeddedId并连接两个表之前,这个问题不会发生。有什么关系吗

添加我的代码:

Car和Pool实体都共享PK可嵌入类

@Embeddable
public class PK implements Serializable {
private String acctYymm;
private String carInit;
private String carNum;

@Column(name = "ACCT_YYMM", nullable = false, length = 4)
public String getAcctYymm() {
    return acctYymm;
}

//skipping getters and setters

@Column(name = "CAR_INIT", nullable = false, length = 4)
public String getCarInit() {
    return carInit;
}

@Column(name = "CAR_NUM", nullable = false, length = 6)
public String getCarNum() {
    return carNum;
}

}

如果仔细查看映射,您会发现您混合了基于属性和基于字段的访问

您需要将@EmbeddedId注释从字段移动到属性:

private PK pk = null;

@EmbeddedId
public PK getPk() {
    return pk;
}
这适用于PoolEntity PoolEntity;和PoolEntity pk属性


您需要对这些映射保持一致,否则Hibernate将无法找到它们。

如果仔细查看映射,您会发现您混合了属性和基于字段的访问

您需要将@EmbeddedId注释从字段移动到属性:

private PK pk = null;

@EmbeddedId
public PK getPk() {
    return pk;
}
这适用于PoolEntity PoolEntity;和PoolEntity pk属性


您需要对这些映射保持一致,否则Hibernate将无法找到它们。

非常感谢@vlad mihalcea。它工作得很好。我应该读一下访问类型。我打赌值得一读。只是好奇,它有平装本吗?还有,有没有计划写一本OpenJPA的书平装本是。为什么我要写关于框架的文章?非常感谢@vlad mihalcea。它工作得很好。我应该读一下访问类型。我打赌值得一读。只是好奇,它有平装本吗?还有,有没有计划写一本OpenJPA的书平装本是。为什么我要写一篇关于框架的文章?
private PK pk = null;

@EmbeddedId
public PK getPk() {
    return pk;
}