📜  使用注释休眠多对多示例

📅  最后修改于: 2021-01-02 15:42:06             🧑  作者: Mango

使用注释休眠多对多示例

在上一节中,我们使用XML文件执行了多对多映射。在这里,我们将使用注释执行此任务。

我们可以使用列表,集合,包,地图等来映射多对多关系。在这里,我们将使用列表进行多对多映射。在这种情况下,将创建三个表。

多对多映射示例

在此示例中,我们将通过列表在问题和答案之间生成多对多关系。

1)创建持久性类

Question.java

package com.javatpoint;  
  
import java.util.List;
import javax.persistence.*;  
  
@Entity
@Table(name="ques1123")
public class Question {  
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
private int id;  
private String qname; 

@ManyToMany(targetEntity = Answer.class, cascade = { CascadeType.ALL })
@JoinTable(name = "q_ans1123", 
            joinColumns = { @JoinColumn(name = "q_id") }, 
            inverseJoinColumns = { @JoinColumn(name = "ans_id") })
private List answers;

public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getQname() {
    return qname;
}
public void setQname(String qname) {
    this.qname = qname;
}
public List getAnswers() {
    return answers;
}
public void setAnswers(List answers) {
    this.answers = answers;
}    
}

Answer.java

package com.javatpoint;

import javax.persistence.*;

@Entity
@Table(name="ans1123")
public class Answer { 
    
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
private int id;  
private String answername;  
private String postedBy;  
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getAnswername() {
    return answername;
}
public void setAnswername(String answername) {
    this.answername = answername;
}
public String getPostedBy() {
    return postedBy;
}
public void setPostedBy(String postedBy) {
    this.postedBy = postedBy;
}

}  

2)在pom.xml文件中添加项目信息和配置。

打开pom.xml文件,然后单击源。现在,在 …. 标记之间添加以下依赖关系。

  
    org.hibernate  
    hibernate-core  
    5.3.1.Final  
  
  
    com.oracle  
    ojdbc14  
    10.2.0.4.0  
  

3)创建配置文件

该文件包含有关数据库和映射文件的信息。

  
  
  
  
  
      
        create  
        org.hibernate.dialect.Oracle9Dialect  
        jdbc:oracle:thin:@localhost:1521:xe  
        system  
        jtp  
        oracle.jdbc.driver.OracleDriver  
      
    
      
  

4)创建存储数据的类

StoreData.java

package com.javatpoint;  
import java.util.ArrayList;  
import org.hibernate.*;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
   
public class StoreData {  
public static void main(String[] args) {  
   
    StandardServiceRegistry ssr=new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();  
    Metadata meta=new MetadataSources(ssr).getMetadataBuilder().build();  
    SessionFactory factory=meta.getSessionFactoryBuilder().build();  
    Session session=factory.openSession();  
    Transaction t=session.beginTransaction();    
        
    Answer an1=new Answer();
    an1.setAnswername("Java is a programming language");
    an1.setPostedBy("Ravi Malik");
    
    Answer an2=new Answer();
    an2.setAnswername("Java is a platform");
    an2.setPostedBy("Sudhir Kumar");
   
    Question q1=new Question();
    q1.setQname("What is Java?");
    ArrayList l1=new ArrayList();
    l1.add(an1);
    l1.add(an2);
    q1.setAnswers(l1);
    
    
      Answer ans3=new Answer();  
        ans3.setAnswername("Servlet is an Interface");  
        ans3.setPostedBy("Jai Kumar");  
          
        Answer ans4=new Answer();  
        ans4.setAnswername("Servlet is an API");  
        ans4.setPostedBy("Arun");  
    
    Question q2=new Question();
    q2.setQname("What is Servlet?");
    ArrayList l2=new ArrayList();
    l2.add(ans3);
    l2.add(ans4);
    q2.setAnswers(l2);
    
    session.persist(q1);  
    session.persist(q2);  
      
    t.commit();  
    session.close();  
    System.out.println("success");  
    
     
}  
} 

输出量


下载