2009-06-04 35 views
9

sorguyu katılmak yazmayı birçok ile iki fasulye Kullanıcı ve VirtualDomain oluşturduk hazırda yoluyla belirli bir etki ile ilgili kullanıcı adı gibi kullanıcının verileri almak için nasıl hazırda

@Entity 
@Table(name = "tblUser") 
public class User implements Serializable { 
    private Long id; 
    private String username; 
    private Set<VirtualDomain> virtualdomainset; 
@Id 
@Column(name = "id") 
@GeneratedValue(strategy = GenerationType.AUTO) 
public Long getId() { 
    return id; 
} 

public void setId(Long id) { 
    this.id = id; 
} 

@Column(name = "username", length = 50, nullable = false) 
public String getUsername() { 
    return username; 
} 

public void setUsername(String username) { 
    this.username = username; 
} 
    @ManyToMany(targetEntity = VirtualDomain.class, cascade = {CascadeType.PERSIST},fetch=FetchType.EAGER) 
    @JoinTable(name = "tblUserDomainRel", joinColumns = @JoinColumn(name = "userid"), inverseJoinColumns = @JoinColumn(name = "domainid")) 
    public Set<VirtualDomain> getVirtualdomainset() { 
     return virtualdomainset; 
    } 

    public void setVirtualdomainset(Set<VirtualDomain> virtualdomainset) { 
     this.virtualdomainset = virtualdomainset; 
    } 

} 

@Entity 
@Table(name = "tblVirtualDomain") 
public class VirtualDomain { 
    private Long id; 
    private String domainname; 
    private Set<User> userset; 
@Id 
@JoinColumn(name = "id") 
@GeneratedValue(strategy = GenerationType.AUTO) 
public Long getId() { 
    return id; 
} 

public void setId(Long id) { 
    this.id = id; 
} 

@Column(name = "domain_name") 
public String getDomainname() { 
    return domainname; 
} 

public void setDomainname(String domainname) { 
    this.domainname = domainname; 
} 
@ManyToMany(cascade = {CascadeType.ALL},fetch=FetchType.EAGER, mappedBy = "virtualdomainset", targetEntity = User.class) 

public Set<User> getUserset() { 
    return userset; 
} 

public void setUserset(Set<User> userset) { 
    this.userset = userset; 
} 
} 

ilişki

birçok.

cevap

10

Gid'in cevabını eklemek için, eğer bir sebepten ötürü entitüsyon ilişkilerini hevesle almanız gerekiyorsa, o zaman birleştirme sözdizimi topluluğa katılmak olacaktır.

from VirtualDomain vd join fetch vd.usersset u 
    where vd.domainname = 'example.com' and u.username like 'foo%' 
+0

merhaba Blake. lütfen bana yardım edin Bu sorguyu kullandığımda bana hata veriyor java.lang.NoSuchMethodError: org.hibernate.hql.antlr.HqlBaseParser.recover (Lantlr/RecognitionException; Lantlr/collections/impl/BitSet;) V – Jugal

+0

I ' ve sorguyu düzenledik, sorguda herhangi bir Kullanıcı bulunmamalıdır. –

+0

sizin düzenlenmiş sorgunun tamam görünüyor ama ben sadece kullanıcı adından Kullanıcı ismini istiyorum, bu yüzden u.username seçin select yan tümcesini eklediğimde bana hata verir org.hibernate.QueryException: sorgu getirme katılmayı getirme, ancak getirilen çağrının sahibi değildi Seçim listesinde mevcut – Jugal

2

daima differcult todo bir test sistemi ile dışarı HQL ... ama işte başlıyoruz:

select u from VirtualDomain vd join User vd.usersset u 
     where vd.domainname = 'example.com' and u.username like 'foo%' 

Beni almak nasıl bildirin.

Intellji'yi satın almadan önce sık sık yaptığım bir ipucu, uygulamayı hata ayıklayıcısında durdurmaktı ve ardından HQL'yi denemek için hemen pencereyi kullanacaktı.

Birleştirmelerdeki hibernate documentation, bence her zaman biraz şifreli olmuştur.

+0

Teşekkür ama 'foo%' gibi yarışmalarında son durum v.name anlayamıyorum – Jugal

+0

Yani SQL bulunur benzeri maddenin aynı tür. http://www.sql-tutorial.net/SQL-LIKE.asp –

+0

yalnızca yazım hatası düzeltildi. Blake gibi yan tümce, SQL bir –

İlgili konular