2016-03-25 8 views
1

私は休止状態でjoinを実行しようとしています。私はstruts2を使用しています。 私はannotaionsを使用している休止状態で作業しています。今、私は2つのテーブル間の結合を実行することができません。私の最初のテーブルは、pidとemail.Secondテーブルを含む "studentprojects"は、pid、名前、説明を含む "initialprojectdetials"です...同様にいくつかの他のフィールド。第1のテーブルのpidの周りで結合を実行することによって第2のテーブルのデータを更新する。annotaionでhibernateに参加する

String hql="from InitialProjectDTO I join I.projectId S where I.projectId=:id"; 
     Query query=session.createQuery(hql); 
     query.setParameter("id", id); 
     mail =query.list(); 

メールがInitialProjectDTOのArrayListには、次のとおりです。このため は、このクエリを使用しています。 そして、私のInitialProjectDTOは次のとおりです。

package edu.pma.dto; 

import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.JoinTable; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 



@Entity 
@Table(name="initialprojectdetail") 
public class InitialProjectDTO { 

    @Id 
    @Column(name="projectId") 
    @OneToMany(cascade=CascadeType.ALL) 
    @JoinTable(name="studentprojects",[email protected](name="projectId")) 
    int projectId; 

    @Column(name="name") 
    String name; 

    @Column(name="description") 
    String description; 

    @Column(name="technology") 
    String technology; 

    @Column(name="guide") 
    String guide; 

    @Column(name="duration") 
    int duration; 

    @Column(name="status") 
    String status; 
    @Column(name="report") 
    String report; 

    public String getReport() { 
     return report; 
    } 

    public void setReport(String report) { 
     this.report = report; 
    } 

    public int getProjectId() { 
     return projectId; 
    } 

    public void setProjectId(int projectId) { 
     this.projectId = projectId; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    public String getTechnology() { 
     return technology; 
    } 

    public void setTechnology(String technology) { 
     this.technology = technology; 
    } 

    public String getGuide() { 
     return guide; 
    } 

    public void setGuide(String guide) { 
     this.guide = guide; 
    } 

    public int getDuration() { 
     return duration; 
    } 

    public void setDuration(int duration) { 
     this.duration = duration; 
    } 

    public String getStatus() { 
     return status; 
    } 

    public void setStatus(String status) { 
     this.status = status; 
    } 

} 

私SudentProjectDTOは次のとおりです。これは私が取得していますエラーです

package edu.pma.dto; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name="studentprojects") 
public class StudentProjectDTO { 

    public int getProjectId() { 
     return projectId; 
    } 
    public void setProjectId(int projectId) { 
     this.projectId = projectId; 
    } 
    @Id 
    @Column(name="email") 
    String email; 
    @Column(name="projectId") 
    int projectId; 
    public String getEmail() { 
     return email; 
    } 
    public void setEmail(String email) { 
     this.email = email; 
    } 

} 

Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: edu.pma.dto.InitialProjectDTO.projectId 
Method "execute" failed for object [email protected] 
File: org/hibernate/cfg/annotations/CollectionBinder.java 
+0

おかげのようなものにshoud。しかし、それは私にとってはうまくいきませんでした。私は注釈を使用しているので、私はDTOクラスの中で、部分DBテーブルであるものを除き、余分なフィールドを追加することはできません。したがって、それは私にsesdion工場を建設しないという誤りを与えています。 –

答えて

0

あなたは別のモデルを使用しようとすべきであるが、

@Entity 
public class InitialProjectDTO { 

@OneToMany(mappedBy = "project") 
private Collection<StudentProjectDTO> students; 

} 

@Entity 
public class StudentProjectDTO { 

@ManyToOne 
private InitialProjectDTO project; 

} 

そして適切なモデルを使ってhqlを書くのは簡単ですが、ここではhttps://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.htmlの例を見てください。

また、ここでモデルの例を見てみることをお勧めします。あなたにhttp://viralpatel.net/blogs/hibernate-one-to-many-annotation-tutorial/

0

次の例を参照してください可能性があるその助け

@Entity 
@Table(name="initialprojectdetail") 
public class InitialProjectDTO { 


    private Integer initialProjectDTOId; 
    private Set<StudentProjectDTO > studentProjectDTO = new HashSet<StudentProjectDTO >(0); 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name = "initial_projectDTO_id", unique = true, nullable = false) 
    public Integer getInitialProjectDTOId() { 
     return this.initialProjectDTOId; 
    } 

    public void setInitialProjectDTOId(Integer initialProjectDTOId) { 
     this.initialProjectDTOId = initialProjectDTOId; 
    } 

    @OneToMany(mappedBy = "studentprojects", cascade = CascadeType.ALL, fetch=FetchType.LAZY) 
    public Set<StudentProjectDTO> getUserRole() { 
     return this.studentProjectDTO; 
    } 

    public void setUserRole(Set<StudentProjectDTO> studentProjectDTO) { 
     this.studentProjectDTO = studentProjectDTO; 
    } 

} 

@Entity 
@Table(name="studentprojects") 
public class StudentProjectDTO { 

    private InitialProjectDTO project; 

    @ManyToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "initial_projectDTO_id", nullable = false) 
    public User getProject() { 
     return this.project; 
    } 

    public void setProject(InitialProjectDTO project) { 
     this.project = project; 
    } 
} 

あなたのクエリは、あなたの応答のために、この

String hql="SELECT ip from InitialProjectDTO ip JOIN ip.studentProjectDTO sp WHERE sp.projectId = :id"; 
     Query query=session.createQuery(hql); 
     query.setParameter("id", id); 
     mail =query.list(); 
関連する問題