我正在尝试用我的两个表实现一个简单的连接操作,使用带有spring3 mvc的hibernate 3注释。
我有两张桌子:
CREATE TABLE IF NOT EXISTS `employee` (`enter code here`
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`address1` varchar(100) NOT NULL,
`address2` varchar(100) NOT NULL,
`created_at` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB
CREATE TABLE IF NOT EXISTS `salary` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`employee_id` int(11) NOT NULL,
`basic_pay` int(5) NOT NULL,
`take_home` int(5) NOT NULL,
PRIMARY KEY (`id`),
KEY `employee_id` (`employee_id`)
) ENGINE=InnoDB
我创建了两个带注释的模态类:
@Entity
@Table(name = "employee", catalog = "employee")
public class Employee implements java.io.Serializable {
private Integer id;
private String name;
private String address1;
private String address2;
private Date createdAt;
private Set salaries = new HashSet(0);
public Employee() {
}
public Employee(String name, String address1, String address2,
Date createdAt) {
this.name = name;
this.address1 = address1;
this.address2 = address2;
this.createdAt = createdAt;
}
public Employee(String name, String address1, String address2,
Date createdAt, Set salaries) {
this.name = name;
this.address1 = address1;
this.address2 = address2;
this.createdAt = createdAt;
this.salaries = salaries;
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "name", nullable = false, length = 100)
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "address1", nullable = false, length = 100)
public String getAddress1() {
return this.address1;
}
public void setAddress1(String address1) {
this.address1 = address1;
}
@Column(name = "address2", nullable = false, length = 100)
public String getAddress2() {
return this.address2;
}
public void setAddress2(String address2) {
this.address2 = address2;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "created_at", nullable = false, length = 0)
public Date getCreatedAt() {
return this.createdAt;
}
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "employee")
public Set getSalaries() {
return this.salaries;
}
public void setSalaries(Set salaries) {
this.salaries = salaries;
}
@Entity
@Table(name = "salary", catalog = "employee")
public class Salary implements java.io.Serializable {
private Integer id;
private Employee employee;
private int basicPay;
private int takeHome;
public Salary() {
}
public Salary(Employee employee, int basicPay, int takeHome) {
this.employee = employee;
this.basicPay = basicPay;
this.takeHome = takeHome;
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "employee_id", nullable = false)
public Employee getEmployee() {
return this.employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
@Column(name = "basic_pay", nullable = false)
public int getBasicPay() {
return this.basicPay;
}
public void setBasicPay(int basicPay) {
this.basicPay = basicPay;
}
@Column(name = "take_home", nullable = false)
public int getTakeHome() {
return this.takeHome;
}
public void setTakeHome(int takeHome) {
this.takeHome = takeHome;
}
org.springframework.beans.factory.BeanCreationException: Error creating bean
with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/spring-servlet.xml]:
Invocation of init method failed; nested exception is org.hibernate.MappingException:
Could not determine type for: java.util.Set, at table: EMPLOYEE, for columns:
[org.hibernate.mapping.Column(salaries)]
我的模态课上有什么问题
非常感谢帮助, 谢谢, VKS
答案 0 :(得分:2)
你的Set
工资是一种原始类型,而hibernate不知道如何用一个实体“映射”它。
尝试将targetEntity
添加到@oneToMany
或使用Set<Salary>
答案 1 :(得分:1)
我不是专家,但是我们需要告诉hibernate什么应该是SET的类型。因为在这种情况下,在我看来,我们告诉hibernate SET表示一对多的关系,但是用哪个表??
在* .hbm.xml映射文件中,我猜“table”属性用于此目的。
e.g。
<set cascade="persist, merge, save-update, evict, replicate, lock, refresh" name="Salaries" inverse="true" lazy="true" table="salary">
<key>
//code goes here
</key>
<one-to-many class="Salary" />
</set>