个性化阅读
专注于IT技术分析

使用注解Hibernate多对多示例

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

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

多对多映射示例

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

1)创建持久性类

Question.java

package com.srcmini;  
  
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<Answer> 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<Answer> getAnswers() {
	return answers;
}
public void setAnswers(List<Answer> answers) {
	this.answers = answers;
}    
}

Answer.java

package com.srcmini;

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文件, 然后单击源。现在, 在<dependencies> …. </ dependencies>标记之间添加以下依赖关系。

<dependency>  
    <groupId>org.hibernate</groupId>  
    <artifactId>hibernate-core</artifactId>  
    <version>5.3.1.Final</version>  
</dependency>
<dependency>  
    <groupId>com.oracle</groupId>  
    <artifactId>ojdbc14</artifactId>  
    <version>10.2.0.4.0</version>  
</dependency>

3)创建配置文件

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

<?xml version='1.0' encoding='UTF-8'?>  
<!DOCTYPE hibernate-configuration PUBLIC  
          "-//Hibernate/Hibernate Configuration DTD 5.3//EN"  
          "http://hibernate.sourceforge.net/hibernate-configuration-5.3.dtd">  
  
<hibernate-configuration>  
  
    <session-factory>  
        <property name="hbm2ddl.auto">create</property>  
        <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>  
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>  
        <property name="connection.username">system</property>  
        <property name="connection.password">jtp</property>  
        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>  
    <mapping class="com.srcmini.Question"/>  
    <mapping class="com.srcmini.Answer"/>
    </session-factory>  
  
</hibernate-configuration>

4)创建类来存储数据

StoreData.java

package com.srcmini;  
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<Answer> l1=new ArrayList<Answer>();
	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<Answer> l2=new ArrayList<Answer>();
	l2.add(ans3);
	l2.add(ans4);
	q2.setAnswers(l2);
	
    session.persist(q1);  
    session.persist(q2);  
      
    t.commit();  
    session.close();  
    System.out.println("success");  
    
     
}  
}

输出量

Hibernate多对多示例1
Hibernate多对多示例2

下载

赞(0)
未经允许不得转载:srcmini » 使用注解Hibernate多对多示例

评论 抢沙发

评论前必须登录!