I’m attempting to create a JPA entity for a view. From the database layer, a table and a view should be the same.
However, problems begin to arise and they are two fold:
When attempting to setup the correct annotations. A view does not have a primary key associated with it, yet without the proper
@javax.persistence.Id
annotated upon a field, you will get anorg.hibernate.AnnotationException: No identifier specified for entity
thrown at Runtime.The Spring Boot
JpaRepository
interface definition requires that theID
type extendsSerializable
, which precludes utilizingjava.lang.Void
as a work-around for the lack of an id on an view entity.
What is the proper JPA/SpringBoot/Hibernate way to interact with a view that lacks a primary key?
Advertisement
Answer
I was exploring that topic too. I ended up using Spring Data JPA Interface-based Projections with native queries.
I created an interface, making sure the UPPERCASE part matches the DB Column names:
public interface R11Dto { String getTITLE(); Integer getAMOUNT(); LocalDate getDATE_CREATED(); }
Then i created a repository, for an Entity (User) not related in any way to the view. In that repository i created a simple native query. vReport1_1 is my view.
public interface RaportRepository extends JpaRepository<User, Long> { @Query(nativeQuery = true, value = "SELECT * FROM vReport1_1 ORDER BY DATE_CREATED, AMOUNT") List<R11Dto> getR11(); }