hibernate.jpa.criteria.BasicPathUsageException: 无法加入基本类型的属性
hibernate.jpa.criteria.BasicPathUsageException: Cannot join to attribute of basic type
我有两个 table:Tax
和 TaxRule
。 table 即 TAX_RULE_ID
中有一列相同。但是不要有任何像 OneToOne
或 OneToMany
这样的 Hibernate 映射。 table 看起来都像-
税收
@Id
@Column(name = "TAX_RATE_ID")
private Long taxRateId;
@Column(name = "TAX_RULE_ID")
private Long taxRuleId;
@Column(name = "TAX_TYPE")
private String taxType;
TAX_RULE
@Id
@Column(name = "TAX_RULE_ID")
private Long taxRuleId;
@Column(name = "TAX_CD")
private String TaxCode;
@Column(name = "STATE")
private String state;
我正在尝试获取有关密钥的数据,即 TAX_RULE_ID
。此列在 table 中都很常见。
我有以下 Hibernate
代码,其中我在 TAX_RULE_ID
列上加入了两个 table,如下所示:
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<String[]> cQuery = criteriaBuilder.createQuery(String[].class);
Root<Tax> taxRoot = cQuery.from(Tax.class);
cQuery.multiselect(taxRateRoot.get("taxType"), taxRateRoot.get("taxRate"));
List<Predicate> predicates = new ArrayList<>();
Join<Tax, TaxRule> join = taxRoot.join("taxRuleId");
.....rest of the code.
我在连接点上遇到以下异常:
org.hibernate.jpa.criteria.BasicPathUsageException: Cannot join to attribute of basic type
at org.hibernate.jpa.criteria.path.AbstractFromImpl.constructJoin(AbstractFromImpl.java:270)
at org.hibernate.jpa.criteria.path.AbstractFromImpl.join(AbstractFromImpl.java:263)
at org.hibernate.jpa.criteria.path.AbstractFromImpl.join(AbstractFromImpl.java:436)
at com.iclsystems.base.dao.TaxRateDAOImpl.getTaxTypeForApplicableWorkOrderTax(TaxRateDAOImpl.java:31)
at com.iclsystems.base.businessObjects.TaxLookupBOImpl.getTaxTypeForApplicableWorkOrderTax(TaxLookupBOImpl.java:53)
at com.iclsystems.base.businessObjects.TaxLookupBOImpl.getWorkOrderTaxLookup(TaxLookupBOImpl.java:29)
at com.iclsystems.test.eventhandler.base.TaxLookupBOTest.testTaxLookupBO(TaxLookupBOTest.java:52)
您不能将 @Join
注释用于基本 属性(例如,具有简单 @Column
映射的属性)。 @Join
用于协会:
- 一对一
- 一对多
- 多对一
- 多对多
您需要删除此行,因为 taxRuleId
已从数据库中提取:
Join<Tax, TaxRule> join = taxRoot.join("taxRuleId");
如果你想加入TaxRuletable,你需要替换:
@Column(name = "TAX_RULE_ID")
private Long taxRuleId;
具有多对一关联:
@ManyToOne
@JoinColumn(name = "TAX_RULE_ID")
private TaxRule raxRule;
我有两个 table:Tax
和 TaxRule
。 table 即 TAX_RULE_ID
中有一列相同。但是不要有任何像 OneToOne
或 OneToMany
这样的 Hibernate 映射。 table 看起来都像-
税收
@Id
@Column(name = "TAX_RATE_ID")
private Long taxRateId;
@Column(name = "TAX_RULE_ID")
private Long taxRuleId;
@Column(name = "TAX_TYPE")
private String taxType;
TAX_RULE
@Id
@Column(name = "TAX_RULE_ID")
private Long taxRuleId;
@Column(name = "TAX_CD")
private String TaxCode;
@Column(name = "STATE")
private String state;
我正在尝试获取有关密钥的数据,即 TAX_RULE_ID
。此列在 table 中都很常见。
我有以下 Hibernate
代码,其中我在 TAX_RULE_ID
列上加入了两个 table,如下所示:
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<String[]> cQuery = criteriaBuilder.createQuery(String[].class);
Root<Tax> taxRoot = cQuery.from(Tax.class);
cQuery.multiselect(taxRateRoot.get("taxType"), taxRateRoot.get("taxRate"));
List<Predicate> predicates = new ArrayList<>();
Join<Tax, TaxRule> join = taxRoot.join("taxRuleId");
.....rest of the code.
我在连接点上遇到以下异常:
org.hibernate.jpa.criteria.BasicPathUsageException: Cannot join to attribute of basic type
at org.hibernate.jpa.criteria.path.AbstractFromImpl.constructJoin(AbstractFromImpl.java:270)
at org.hibernate.jpa.criteria.path.AbstractFromImpl.join(AbstractFromImpl.java:263)
at org.hibernate.jpa.criteria.path.AbstractFromImpl.join(AbstractFromImpl.java:436)
at com.iclsystems.base.dao.TaxRateDAOImpl.getTaxTypeForApplicableWorkOrderTax(TaxRateDAOImpl.java:31)
at com.iclsystems.base.businessObjects.TaxLookupBOImpl.getTaxTypeForApplicableWorkOrderTax(TaxLookupBOImpl.java:53)
at com.iclsystems.base.businessObjects.TaxLookupBOImpl.getWorkOrderTaxLookup(TaxLookupBOImpl.java:29)
at com.iclsystems.test.eventhandler.base.TaxLookupBOTest.testTaxLookupBO(TaxLookupBOTest.java:52)
您不能将 @Join
注释用于基本 属性(例如,具有简单 @Column
映射的属性)。 @Join
用于协会:
- 一对一
- 一对多
- 多对一
- 多对多
您需要删除此行,因为 taxRuleId
已从数据库中提取:
Join<Tax, TaxRule> join = taxRoot.join("taxRuleId");
如果你想加入TaxRuletable,你需要替换:
@Column(name = "TAX_RULE_ID")
private Long taxRuleId;
具有多对一关联:
@ManyToOne
@JoinColumn(name = "TAX_RULE_ID")
private TaxRule raxRule;