日期:2014-05-17  浏览次数:20715 次

Hibernate 一对多,Integer 的 ID 为什么总是错
如题,正在研究一对多映射,但是不管我怎么设置他们的ID,都是1,而不是我所设置的值。

代码如下


@Entity
@Table(name = "t_group")
public class Group {
private Integer id;
private String name;
private Set<User> users = new HashSet<User>();

// 在主键的get方法前
// 标注主键,以及生成主键策略
// 相当于<id name="id"><generator class="native"></generator></id>
@Id
@GeneratedValue
public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

// 在一般属性的get方法前
// 一般的列名前不需要标注
// 相当于<property name="name"></property>
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

// 在一对多"一"的一方关联的集合前
// 使用@OneToMany标注,并标明"mappedBy",即关联的"多"的一方所对应的类的属性
// cascade参数标明级联的方式,如果不需要级联可以省略
// 相当于<set name="users">
// <key column="groupId"></key>
// <one-to-many class="com.pegasus.domain.User"/>
// </set>
@OneToMany(mappedBy = "group", cascade = { CascadeType.ALL })
public Set<User> getUsers() {
return users;
}

public void setUsers(Set<User> users) {
this.users = users;
}
}



import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
//在实体类的类名前
//标注是实体
//对应的表名
//相当于xml的
//<class name="com.pegasus.domain.User" table="t_user"></class>
@Entity
@Table(name="t_user")
public class User {
private Integer id;
private String name;
private Group group;

//在主键的get方法前
//标注主键,以及生成主键策略
//相当于<id name="id"><generator class="native"></generator></id>
@Id
@GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}

//在一般属性的get方法前
//一般的列名前不需要标注
//相当于<property name="name"></property>
public String getName() {
return name;