日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java多表查询实体接收_java - 如何创建Criteria Builder查询以连接具有一对一和多对一实体关系的三个表? - 堆栈内存溢出...

發布時間:2025/3/19 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java多表查询实体接收_java - 如何创建Criteria Builder查询以连接具有一对一和多对一实体关系的三个表? - 堆栈内存溢出... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我想創建一個用于連接三個表的條件構建器查詢。 我已經研究了互聯網,但是三個表連接的所有示例都具有與我想要的關系不同的關系。 因此,我有三個具有以下結構的表:

并且實體如下:

@Entity

@Table(name = "DEPARTMENT")

@Data

public class Department {

@Id

@GeneratedValue(generator = "uuid")

@Column(unique = true, length = 36)

private String id;

@NotNull

@Column(name = "NAME")

private String name;

@ManyToOne(fetch = FetchType.EAGER)

@JoinColumn(name = "HEAD_ID")

private Head head;

}

@Entity

@Table(name = "EMPLOYEES")

@Data

public class Employees {

@Id

@GeneratedValue(generator = "uuid")

@Column(unique = true, length = 36)

private String id;

@NotNull

@Column(name = "EMP_NAME")

private String empName;

@Column(name = "RESUME")//clob

private String resume;

@ManyToOne(fetch = FetchType.EAGER)

@JoinColumn(name = "DEPT_ID")

private Department department;

}

@Entity

@Table(name = "CONTACT")

@Data

public class Contact {

@Id

@GeneratedValue(generator = "uuid")

@Column(unique = true, length = 36)

private String id;

@NotNull

@Column(name = "NUMBER")

private Long number;

@NotNull

@Column(name = "CITY")

private String city;

@Column(name = "ADDRESS")//clob

private String address;

@OneToOne(fetch = FetchType.EAGER)

@JoinColumn(name = "DEPT_ID")

private Department department;

}

現在我想

獲取部門聯系人,該部門的聯系人當前在ID為1234的標題下發布了名為Mike的員工。

我已經嘗試了以下查詢

CriteriaBuilder builder = getCriteriaBuilder();

CriteriaQuery criteria = builder.createQuery(Contact.class);

Root contactRoot = criteria.from(Contact.class);

Root employeesRoot = criteria.from(Employees.class);

//Join employeesDepartmentJoin = contactRoot.join("department", JoinType.INNER); With this statement#: Throws java.lang.IllegalArgumentException: Unable to locate Attribute with the the given name [empName] on this ManagedType [org.sample.something.Contact] exception.

Join employeesDepartmentJoin = employeesRoot.join("department", JoinType.INNER);

Join contactDepartmentJoin = contactRoot.join("department", JoinType.INNER);

List predicates = new ArrayList();

predicates.add(builder.equal(employeesDepartmentJoin.get("head").get("id"), headID));

predicates.add(builder.equal(employeesDepartmentJoin.getParent().get("empName"), empName));

criteria.where(builder.and((Predicate[]) predicates.toArray(new Predicate[0])));

criteria.select(contactRoot).distinct(true);

return getEm().createQuery(criteria).getResultList(); //Without statement#: Throws org.hibernate.exception.SQLGrammarException: could not extract ResultSet exception.

語法異常期間生成的休眠查詢為:

select distinct contact0_.id as id1_47_, contact0_.number as number_id9_47_, contact0_.city as city10_47_, contact0_.address as address10_47_, contact0_.department_id as department11_47_

from sample.contact contact0_

inner join sample.department department2_ on contact0_.department_id=department2_.id

cross join sample.employees employees1_

inner join sample.department department3_ on employees1_.department_id=department3_.id

where department3_.head_id=? and employees1_.employee_name=?

任何可以輕描淡寫的人都會有所幫助。 謝謝。

編輯:具有新字段和SQLGrammarException的StackTrace的更新的代碼(僅在評估時拋出“無法定位屬性..”的第一個異常,否則它將拋出相同的SQLGrammarException)

Caused by: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet

at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)

at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1514)

at org.hibernate.query.Query.getResultList(Query.java:132)

at org.hibernate.query.criteria.internal.compile.CriteriaQueryTypeQueryAdapter.getResultList(CriteriaQueryTypeQueryAdapter.java:74)

at org.sample.something.dao.ContactDAO.getContactByHeadAndEmployeeName(ContactDAO.java:102)

... 61 common frames omitted

Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet

at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63)

at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)

at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)

at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)

at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:69)

at org.hibernate.loader.Loader.getResultSet(Loader.java:2167)

at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1930)

at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1892)

at org.hibernate.loader.Loader.doQuery(Loader.java:937)

at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:340)

at org.hibernate.loader.Loader.doList(Loader.java:2689)

at org.hibernate.loader.Loader.doList(Loader.java:2672)

at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2506)

at org.hibernate.loader.Loader.list(Loader.java:2501)

at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:504)

at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:395)

at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:220)

at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1508)

at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1537)

at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1505)

... 64 common frames omitted

Caused by: java.sql.SQLSyntaxErrorException: ORA-00932: inconsistent datatypes: expected - got CLOB

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)

at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1017)

at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:655)

at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249)

at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:566)

at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:215)

at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:58)

at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:776)

at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:897)

at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1034)

at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3820)

at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3867)

at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1502)

at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52)

at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java)

總結

以上是生活随笔為你收集整理的java多表查询实体接收_java - 如何创建Criteria Builder查询以连接具有一对一和多对一实体关系的三个表? - 堆栈内存溢出...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。