JPA+JBOSS Hibernate NamedQuery不使用列名
下面是我的JPA实体的一个片段。当我使用Hibernate DB2方言在JBOSS中运行此查询时,生成的select查询使用的是acctYymm,而不是ACCT_YYMM,从而导致-206异常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
@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;
}