JPA ElementCollection CollectionTable覆盖示例
2018-02-23 15:35 更新
JPA教程 - JPA ElementCollection CollectionTable覆盖示例
以下代码显示了如何将集合与目标实体映射到数据库。
// Using a targetClass instead of generics @ElementCollection(targetClass=VacationEntry.class) @CollectionTable(name="VACATION",joinColumns=@JoinColumn(name="EMP_ID")) @AttributeOverride(name="daysTaken",column=@Column(name="DAYS_ABS")) private Collection vacationBookings = new LinkedList();
例子
以下代码来自Employee.java。
package cn.w3cschool.common;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Set;
import javax.persistence.AttributeOverride;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
@Entity
public class Employee {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String name;
// Using a targetClass instead of generics
@ElementCollection(targetClass=VacationEntry.class)
@CollectionTable(name="VACATION",
joinColumns=@JoinColumn(name="EMP_ID"))
@AttributeOverride(name="daysTaken",
column=@Column(name="DAYS_ABS"))
private Collection vacationBookings = new LinkedList();
// Using generics in place of a targetClass
@ElementCollection
@Column(name="NICKNAME")
private Set<String> nickNames = new HashSet();
public Collection getVacationBookings() {
return vacationBookings;
}
public void setVacationBookings(Collection vacationBookings) {
this.vacationBookings = vacationBookings;
}
public Set<String> getNickNames() {
return nickNames;
}
public void setNickNames(Set<String> nickNames) {
this.nickNames = nickNames;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "Employee id: " + getId() + " name: " + getName() +
" nickNames: " + nickNames;
}
}
下面的代码来自PersonDaoImpl.java。
package cn.w3cschool.common;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.transaction.annotation.Transactional;
@Transactional
public class PersonDaoImpl {
public void test() {
Employee emp = new Employee();
emp.setName("name");
VacationEntry v = new VacationEntry();
v.setDaysTaken(10);
emp.getVacationBookings().add(v);
emp.getNickNames().add("Tester");
em.persist(emp);
}
@PersistenceContext
private EntityManager em;
}
以下代码来自VacationEntry.java。
package cn.w3cschool.common;
import java.util.Calendar;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Embeddable
public class VacationEntry {
@Temporal(TemporalType.DATE)
private Calendar startDate;
@Column(name="DAYS")
private int daysTaken;
public VacationEntry() {}
public VacationEntry(Calendar aStartDate, int daysTakenInt) {
startDate = aStartDate;
daysTaken = daysTakenInt;
}
public Calendar getStartDate() {
return startDate;
}
public void setStartDate(Calendar startDate) {
this.startDate = startDate;
}
public int getDaysTaken() {
return daysTaken;
}
public void setDaysTaken(int daysTaken) {
this.daysTaken = daysTaken;
}
public String toString() {
return "VacationEntry startDate: " + getStartDate().getTime() +
", daysTaken: " + getDaysTaken();
}
}
下载 ElementCollection_CollectionTable_Override.zip以下是数据库转储。
Table Name: EMPLOYEE
Row:
Column Name: ID,
Column Type: INTEGER:
Column Value: 1
Column Name: NAME,
Column Type: VARCHAR:
Column Value: name
Table Name: EMPLOYEE_NICKNAMES
Row:
Column Name: EMPLOYEE_ID,
Column Type: INTEGER:
Column Value: 1
Column Name: NICKNAME,
Column Type: VARCHAR:
Column Value: Tester
Table Name: VACATION
Row:
Column Name: EMP_ID,
Column Type: INTEGER:
Column Value: 1
Column Name: DAYS_ABS,
Column Type: INTEGER:
Column Value: 10
Column Name: STARTDATE,
Column Type: DATE:
Column Value: null
以上内容是否对您有帮助:

免费 AI IDE


更多建议: