DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Newsletter
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Related

  • Implement Hibernate Second-Level Cache With NCache
  • Architectural Miscalculation and Hibernate Problem "Type UUID but Expression Is of Type Bytea"
  • How to Store Text in PostgreSQL: Tips, Tricks, and Traps
  • Simplify Java Persistence Using Quarkus and Hibernate Reactive

Trending

  • Avoiding AI Debt as a Team
  • Part 1: Building Governed MCP Tool Services With Quarkus LangChain4j and Goose
  • Moving 900+ GB of Prometheus Without a Cutover Weekend
  • Taming Parameter Sniffing in SQL Server 2022 With PSP Optimization

Draft This article hasn't been published, so readers can't see it.

In moderation This article is waiting for review, so readers can't see it yet.

Deleted This article has been deleted, so readers can't see it.

  1. DZone
  2. Data Engineering
  3. Databases
  4. Hibernate Tips: How to Map Native Query Results to Entities

Hibernate Tips: How to Map Native Query Results to Entities

Check out some Hibernate tips on how to map native query results to entities. Also take a look at a video.

By 
Thorben Janssen
·
Updated Oct. 30, 18 · Tutorial
Post on X (opens in a new tab) Share on LinkedIn (opens in a new tab)
30.0K Views

Join the DZone community Save articles, join the discussion, and download Refcards and Trend Reports with a free account.

Join for free Already a member? Log in

Hibernate Tips is a series of posts in which I describe a quick and easy solution for common Hibernate questions. Some of the most popular tips are also available as a book.

If you have a question for a future Hibernate Tip post, please leave a comment below.

Question

My query is too complex for JPQL, and I have to use a native query. Is there a way to map the result of the query to managed entities?

Solution

If your query returns all columns that are mapped by an entity, you can tell Hibernate to map the result to a managed entity. Afterwards, you can use the entity in the same way as any other entity.

There are 2 options to define the mapping:

  1. You can use an implicit mapping if your query result uses the same column names as your entity mapping.
  2. You can create your own mapping if the column names do not match the entity mapping

Implicit Mapping

The implicit mapping is easier to use and the better approach for most use cases. You only need to provide the class of the entity as the second parameter to the createNativeQuery method.

Book b = (Book) em.createNativeQuery("SELECT * FROM book b WHERE id = 1", Book.class).getSingleResult();

Explicit Mapping If the column names of your query result do not match the column names of your entity mapping, you have to define the mapping yourself. You can do this with a @SqlResultSetMapping which specifies the mapping for each entity attribute.

@SqlResultSetMapping(
name = "BookMapping", 
entities = @EntityResult(
entityClass = Book.class, 
fields = {
@FieldResult(name = "id", column = "id"),
@FieldResult(name = "version", column = "version"),
@FieldResult(name = "title", column = "title"),
@FieldResult(name = "publishingDate", column = "publishingDate"),
@FieldResult(name = "publisher", column = "publisherid")}))

As you can see in the code snippet, the @SqlResultSetMapping requires a name and an @EntityResult annotation which defines the mapping to the entity.

You, therefore, need to specify the class of the entity and a set of @FieldResult annotation which define the mapping between the result set column and the entity attribute.

You can then use this mapping by providing its name as the 2nd parameter to the createNativeQuery method.

em.createNativeQuery("SELECT * FROM book b WHERE id = 1", "BookMapping").getSingleResult();
Database Hibernate

Published at DZone with permission of Thorben Janssen. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • Implement Hibernate Second-Level Cache With NCache
  • Architectural Miscalculation and Hibernate Problem "Type UUID but Expression Is of Type Bytea"
  • How to Store Text in PostgreSQL: Tips, Tricks, and Traps
  • Simplify Java Persistence Using Quarkus and Hibernate Reactive

Partner Resources

×

Comments

Loading comments

The comments didn't load

Please try again in a moment.

Likes

Loading

The next likes didn't load. Please try again.

The likes didn't load

Please try again in a moment.

See who liked this

Log in or join DZone for free to see who liked this article.

Log in Join for free
  • RSS
  • X
  • Facebook

ABOUT US

  • About DZone
  • Support and feedback
  • Community research

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 215
  • Nashville, TN 37211
  • [email protected]

Let's be friends:

  • RSS
  • X
  • Facebook