복붙노트

[SQL] SQL 뷰에합니까 JPA 지원 매핑?

SQL

SQL 뷰에합니까 JPA 지원 매핑?

나는 현재는 EclipseLink를 사용하고 있지만 지금은 일 대부분의 JPA 구현이 꽤 표준화 된 것을 알고있다. 뷰에 JPA 엔티티를 매핑하는 기본 방법이 있나요? 나는 / 업데이 트를 삽입 찾고 있지 않다, 그러나 문제는 @Id 주석을 처리하는 방법을 정말입니다. JPA에 세계의 모든 엔티티는 ID 필드가 있어야하지만 내가 만든 뷰의 많은이 일치하지 않습니다. JPA에이 기본적으로 지원이 아니면 내가 작업에 그걸 얻기 위해 해킹을 사용해야합니까? 나는 많이 검색하고이 일에 대해 약간의 정보를 발견했습니다.

해결법

  1. ==============================

    1.직접 지원되는 유형의 필드와 @Id 주석을 사용하여 엔티티의 ID를 지정하는 유일한 방법은 아니다 동안 JPA 스펙은 각 엔티티에 대한 기본 키가 필요합니다 (@Embedded 여러 @Id 주석 또는 @EmbeddedId와 @IdClass 참조).

    직접 지원되는 유형의 필드와 @Id 주석을 사용하여 엔티티의 ID를 지정하는 유일한 방법은 아니다 동안 JPA 스펙은 각 엔티티에 대한 기본 키가 필요합니다 (@Embedded 여러 @Id 주석 또는 @EmbeddedId와 @IdClass 참조).

    즉, 데이터베이스 뷰와 JPA를 사용하는 단체가 필요하지 않습니다 말했다. 뷰에 매핑이 SQL의 관점에서 테이블에 매핑 다르지는 않습니다, 당신은 여전히 ​​대신 스칼라 값을 검색 할 기본 쿼리 (의 EntityManager에 createNativeQuery)를 사용할 수 있습니다.

  2. ==============================

    2.나는이에 자신을 찾고 있었고, 나는 100 % 특정 일을 해요 것으로 만 보이는 약속하는 해킹을 발견했습니다.

    나는이에 자신을 찾고 있었고, 나는 100 % 특정 일을 해요 것으로 만 보이는 약속하는 해킹을 발견했습니다.

    그 이물질 지정된 인스턴스보기 만에 한 번 발생할 수 있습니다 - 내 경우, 나는 PK 효과적으로 기능 할 수있는보기에서 FK 컬럼을 가지고있다. 하나의 ID를 지정하고, 필드의 원시 값을 나타내고, 다른 하나는 읽기 전용 지정되고 언급되는 오브젝트를 표시한다 : 그 중 하나의 필드 오프 두 객체를 정의.

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

    내가 말했듯이, 나는이 일에 100 % 확신 (그것이 작동하지 밝혀지면 난 그냥이 답변 삭제됩니다)하지만, 특정 충돌 지점을지나 내 코드를 얻었다.

    몰라는하지만, 특정 상황에 적용되는 경우. 11 개월 후, 당신은 더 이상 관심이 있다는 좋은 기회가있다. :-) 지옥, 즉 "네크로맨서"배지 그냥 그 자체를 적립 제외 대상 ....

  3. ==============================

    3.나는 엔티티 ID로 매핑 그래서 내 관점에서 I는 "독특한"ID를 가지고있다. 그것은 매우 잘 작동합니다 :

    나는 엔티티 ID로 매핑 그래서 내 관점에서 I는 "독특한"ID를 가지고있다. 그것은 매우 잘 작동합니다 :

    @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;
    
  4. from https://stackoverflow.com/questions/644577/does-jpa-support-mapping-to-sql-views by cc-by-sa and MIT license