2015-05-11 4 views
2

У меня есть две таблицы: Tax и TaxRule. В обеих таблицах один столбец одинаковый. TAX_RULE_ID. Но у вас нет карт Hibernate, таких как OneToOne или OneToMany. И таблица выглядит как-hibernate.jpa.criteria.BasicPathUsageException: Невозможно присоединиться к атрибуту базового типа

НАЛОГ

@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 т.е.. Этот столбец является общим в обеих таблицах. я следующий 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. 

я получаю следующее исключение на точках соединения:

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) 
+0

, как говорится в сообщении, вы не можете присоединиться на не-связи поле. В «taxRuleId» нет отношения. –

ответ

8

Вы не можете присоединиться к @Column. Регистрация для ассоциаций:

  • один-к-одному
  • один-ко-многим
  • много-к-одному
  • многие-ко-многим

Вы должны удалить эта линия, как taxRuleId уже извлекается из базы данных:

Join<Tax, TaxRule> join = taxRoot.join("taxRuleId"); 

I е вы хотите присоединиться к таблице TaxRule, вам нужно заменить:

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

с многие к одному ассоциации:

@ManyToOne 
@JoinColumn(name = "TAX_RULE_ID") 
private TaxRule raxRule; 
+0

А что, если вы не можете изменить TAX, добавив ассоциацию «много-к-одному»? Можно ли сделать соединение? Я только спрашиваю, потому что мои сущности уже исправлены. –

Смежные вопросы