http://ningnian169.blog.51cto.com/2417825/452825
自己做了一个单向多对一的例子。
主贴类(1)-----回帖类(m)
Topic(1)------Feedback(m)
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="JpaTest" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.entity.Topic</class>
<class>com.entity.Feedback</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
<property name="hibernate.connection.url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="hibernate.connection.username" value="ningnian"/>
<property name="hibernate.connection.password" value="ningningx"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
TopicEntity
package com.entity;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table
public class Topic implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private int id;
private String author;
private String title;
private String context;
@Id
@Column
@GeneratedValue(strategy = GenerationType.AUTO)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(length = 20)
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Column(length = 20)
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Column(length = 20)
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
}
Feedback
package com.entity;
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@Entity
public class Feedback implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private int id;
private String author;
private String context;
private Topic topics;
@Id
@Column
@GeneratedValue(strategy = GenerationType.AUTO)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Column
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
/**
* cascade = CascadeType.MERGE--级联更新 cascade=CascadeType.PERSIST--级联持久
* cascade=CascadeType.REMOVE--级联删除 cascade=CascadeType.REFRESH--
* 级联刷新--在业务逻辑中可能对象进行修改,但是读取出来并不是最新的数据。 如果需要最新的数据,这时就得需要级联刷新 fetch =
* FetchType.LAZY--开启延迟加载。 fetch = FetchType.EAGER--即时加载 optional--boolean
* 在数据中,这个字段是否为空 optional=false,这个选项不可以空
*/
@ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY, optional = false)
/**
* @JoinColumn(name = "top_id") 指定外键
*/
@JoinColumn(name = "top_id")
public Topic getTopics() {
return topics;
}
public void setTopics(Topic topics) {
this.topics = topics;
}
}
测试类
@Test
public void testFeedback() {
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("JpaTest");
EntityManager manager = factory.createEntityManager();
Topic topic = new Topic();
topic.setTitle("test");
topic.setContext("this is test");
topic.setAuthor("ning");
Feedback fk = new Feedback();
fk.setAuthor("nian");
fk.setContext("________");
fk.setTopics(topic);
manager.getTransaction().begin();
manager.persist(fk);
manager.getTransaction().commit();
}