Projemizde JPA2, Spring Data ve QueryDSL kullanıyoruz. Aşağıdaki tablolar ve ilgili JPA varlık vardır: ActivityName için Actitivy içinPivot benzeri sonuç JPA/QueryDSL ile
table Person (id, ...)
table Activity (id, type, ...)
@Entity
@Configurable
public class Activity {
@ElementCollection
@CollectionTable(joinColumns = @JoinColumn(name = "ACTIVITY_ID"))
@NotEmpty
@Valid
private Set<ActivityName> names = new HashSet<>();
table ActivityName(activity_id, name, ...)
@Embeddable
@Immutable
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "NAME"))
public static class ActivityName { ... }
table ActivityLevel(person_id, activity_id, level)
@Entity
@Immutable
@Validated
public final class ActivityLevel{...}
1..n - bir faaliyet (örneğin koşu çalıştıran) adı farklı olabilir
bir kişi için belirli bir seviyeye sahip olabilir Belirli bir aktivite ve çeşitli aktiviteleri (her biri tanımlanmış bir seviyeye) perfomlayabilir.
- içeren iş yapılırken herkesin bulunmalıdır Sonuç olarak bir parametre olarak faaliyet isimlerin (örneğin vb çalıştıran) sahip arama (faaliyet bir isim listesi)
- olmalıdır. sonuç tüm faaliyetlerin bunlara karşılık gelen düzeyde, kişinin adı ve kişilerin faaliyetlerinin genel toplamına
Örnek Aşağıdaki veriler ile aramak içerir gerektiğini
- Kişi = (id = 1 , isim = Bob)
- Kişi = (id = 2, isim = Mary)
- Etkinlik = (1, ...)
- Etkinlik = (2, ...)
- ActivityName = (activity_id = 1, adı = "koşu")
- ActivityName = (activity_id = 1, adı = "çalışan")
- ActivityName = (activity_id = 2, adı = "dans")
- activityLevel = (person_id = 1, activity_id = 1, seviye = 0.7f)
- activityLevel = (person_id = 1, activity_id = 2, seviye = 0.1f)
- activityLevel = (person_id = 2, activity_id = 1, seviye = 0,52)
"Çalışan kişiler aranıyor "Ya da 'dans' Böyle bir sonuç almalısınız:
Person[Name] ActitiyName ActivityLevel ActitiyName ActivityLevel Sum
Bob running 0.7 dancing 0.1 0.8
Mary running 0.5 0.5
Sorum:bir ifadesi/projeksiyon ile böyle bir netice elde etmek JPA QL/QueryDSL yolu var mı? Zaten sahip olduğum şey, çok adımlı bir çözümdür - aktivite adlarını ve seviyelerini seçerek, gruplandırmayı ve toplamı Java8 ile gerçekleştirir. Querydsl ile gruplama yaparsam, tek düzey girdileri alamıyorum. Tam tersine, benim çözümümde birkaç adım atmam gerekiyor.
Bunun bir sorgu kullanarak mümkün olup olmadığını bilmek güzel olurdu.
Cevabınız için teşekkür ederiz. Dinamik bir DB bu durumda nasıl çalışır? Üzgünüm, buna aşina değilim. – swinkler