hibernate.jpa.criteria.BasicPathUsageException:无法加入基本类型的属性

Avi*_*ash 3 java oracle hibernate jpa hibernate-criteria

我有两张桌子:TaxTaxRule.两个表中都有一列相同,即TAX_RULE_ID.但是没有像OneToOne或那样的任何Hibernate映射OneToMany.这两张表看起来像 -

@Id
@Column(name = "TAX_RATE_ID")
private Long taxRateId;

@Column(name = "TAX_RULE_ID")
private Long taxRuleId;

@Column(name = "TAX_TYPE")
private String taxType;
Run Code Online (Sandbox Code Playgroud)

TAX_RULE

@Id
@Column(name = "TAX_RULE_ID")
private Long taxRuleId;

@Column(name = "TAX_CD")
private String TaxCode;

@Column(name = "STATE")
private String state;
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取密钥的数据,即TAX_RULE_ID.此列在两个表中都很常见.我有以下Hibernate代码,我在TAX_RULE_ID列中加入两个表,如下所示:

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.
Run Code Online (Sandbox Code Playgroud)

我在连接点上得到以下异常:

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)
Run Code Online (Sandbox Code Playgroud)

Vla*_*cea 9

你不能加入@Column.加入是为了协会:

  • 一到一个
  • 一个一对多
  • 许多到一
  • 许多一对多

您需要删除此行,因为taxRuleId已从数据库中提取该行:

Join<Tax, TaxRule> join = taxRoot.join("taxRuleId");
Run Code Online (Sandbox Code Playgroud)

如果要加入TaxRule表,则需要替换:

@Column(name = "TAX_RULE_ID")
private Long taxRuleId;
Run Code Online (Sandbox Code Playgroud)

与多对一的关联:

@ManyToOne
@JoinColumn(name = "TAX_RULE_ID")
private TaxRule raxRule;
Run Code Online (Sandbox Code Playgroud)

  • 如果你不能通过添加多对一关联来改变TAX怎么办?是否可以进行加入?我只是问,因为我的实体已经修好了. (3认同)