programing

겨울잠을 자다, jpa.slot.BasicPathUsageException: 기본 유형의 특성에 가입할 수 없습니다.

css3 2023. 8. 23. 21:57

겨울잠을 자다, jpa.slot.BasicPathUsageException: 기본 유형의 특성에 가입할 수 없습니다.

두 개의 테이블이 있습니다.Tax그리고.TaxRule두 테이블 모두에 동일한 열이 하나 있습니다.TAX_RULE_ID그러나 다음과 같은 최대 절전 모드 매핑은 없습니다.OneToOne또는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;

세금_규칙

@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)

사용할 수 없습니다.@Join기본 속성에 대한 주석(예: 단순 속성)@Column매핑)을 선택합니다.@Join연결을 위한 것입니다.

  • 일대일의
  • 일대다의
  • 다대일의
  • 다대다의

이 라인을 제거해야 합니다.taxRuleId데이터베이스에서 이미 가져옵니다.

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

TaxRule 테이블에 참여하려면 다음을 교체해야 합니다.

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

다대1 연관성이 있는 경우:

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

언급URL : https://stackoverflow.com/questions/30166806/hibernate-jpa-criteria-basicpathusageexception-cannot-join-to-attribute-of-basi