2016-03-18 10 views
1

JPA/Hibernate ürününü kullanıyorum. Kompozit anahtarlarla iki tabloya katılmanın ve gerçek bir veritabanı ilişkisinin olmamasının en iyi yolunu bulmaya çalışıyorum. Hazırda Bekleme/JPA Kompozit Anahtarlı İki Tabloya Katıl (Dış İlişkiler Yok)

@Embeddable 
public class StepPK implements Serializable{ 
    @Column(name = "step_id") 
    protected String stepId; 

    @Column(name = "packet_id") 
    protected String packetId; 
    ... 
} 


@Entity 
@Table(name = "step_def") 
@IdClass(StepPK.class) 
public class InprocessPacketStep implements Serializable{ 

    @Id 
    private String stepId; 

    @Id 
    private String packetId; 

} 


@Embeddable 
public class StepDetailPK implements Serializable { 
    @Column(name = "step_id") 
    protected String stepId; 

    @Column(name = "packet_id") 
    protected String packetId; 

    @Column(name="user_id") 
    protected String userId; 

    @Column(name="parallel_step_id") 
    protected String parallelId; 
    ... 
} 

@Entity 
@Table(name = "step_detail") 
@IdClass(StepDetailPK.class) 
public class InprocessPacketStepDetail implements Serializable { 

    @Id 
    private String stepId; 

    @Id 
    private String packetId; 

    @Id 
    private String parallelId; 

    @Id 
    private String userId; 
} 

Ne var bugüne kadar bireysel tabloları üzerinden bilgi çekerek zaman harika çalışıyor, ancak ben step_id kendilerine katılmaya bazı yol gerekir

enter image description here

. Gerçekten atanmış bir ilişki olmadığı için OneToMany ve JoinColumns yapmak işe yaramıyor.

ManyToMany kullanmayı denedim ve derleme sırasında patlamıyorum, ancak testlerimin denetlenmesi üzerine SQLGrammar Özel Durumuna neden oluyor.

Tek düşüncem, bunları bir sorgu aracılığıyla el ile birleştirmek, ancak entityManager.createQuery("select InprocessPacketStep step join inprocessPacketStepDetail d on d.stepId = step.stepId") çalıştırmak, bir çalışma zamanı hatasına neden oluyor.

Herhangi bir öneri takdir edilecektir. Başarı olmadan bulduğum farklı şeyleri denemek için biraz uğraştım.

+0

Oh, ima üstteki ge linki temel tablo açıklamasıdır – Jerron

+0

Karşılaşılan hatalar hakkında daha fazla bilgi lütfen. Ayrıca, hangi çıktıyı almaya çalışıyorsunuz? –

+0

neden ek ilişkisel tablo kullanamazsınız? Bu varlıklar arasındaki ilişki nedir? – Cootri

cevap

0

veritabanı şeması bir miras değildir ve değiştirebilirsiniz, ek bir ilişki tabloyla sonra @ManyToMany dernek hile yapmak gerekir: enter image description here

web examples bol popüler JPA 2 için vardır (tabii hazırda dahil) .x uygulama çerçeveleri

Aksi halde bu iplikten çözümü denemelisiniz: @ManyToMany without join table (legacy database)

İlgili konular