Does JPA support mapping to sql views? Does JPA support mapping to sql views? sql sql

Does JPA support mapping to sql views?


While using the @Id annotation with fields of directly supported types is not the only way to specify an entity's identity (see @IdClass with multiple @Id annotations or @EmbeddedId with @Embedded), the JPA specification requires a primary key for each entity.

That said, you don't need entities to use JPA with database views. As mapping to a view is no different from mapping to a table from an SQL perspective, you could still use native queries (createNativeQuery on EntityManager) to retrieve scalar values instead.


I've been looking into this myself, and I've found a hack that I'm not 100% certain works but that looks promising.

In my case, I have a FK column in the view that can effectively function as a PK -- any given instance of that foreign object can only occur once in the view. I defined two objects off of that one field: one is designated the ID and represents the raw value of the field, and the other is designated read-only and represents the object being referred to.

@Id@Column(name = "foreignid", unique = true, nullable = false)public Long getForeignId() {...@OneToOne@JoinColumn(name = "foreignid", insertable=false, updatable=false)public ForeignObject getForeignObject() {...

Like I said, I'm not 100% sure on this one (and I'll just delete this answer if it turns out not to work), but it got my code past a particular crash point.

Dunno if it applies to your specific situation, though. And there's an excellent chance that after 11 months, you no longer care. :-) What the hell, that "Necromancer" badge doesn't just earn itself....


In my view I have a "unique" id, so I mapped it as the Entity id.It works very well:

@Entity@Table(name="table")@NamedQuery(name="Table.findAll", query="SELECT n FROM Table n")public class Table implements Serializable {    private static final long serialVersionUID = 1L;    @Id    @Column(name="column_a")    private int columnA;