【发布时间】:2013-10-04 18:55:20
【问题描述】:
我正在创建用户个人资料,用户可以在其中输入他们的兴趣,其中兴趣是预定义的列表,用户无法从此列表中选择。
我有主键 userId 和 interestId 的用户和兴趣表。
Table:User
-------------------------------------
userId userName
1 aaaa
2 bbbb
3 cccc
和
Table:Intrest
-------------------------------------
interestId interestName
1 Sports
2 Reading
3 Music
多对多映射表
Table:UserIntrest
-------------------------------------
userId interestId
1 1
1 2
1 3
这是我的代码
User.java
@Entity
public class User {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long userId;
private String username;
private String password;
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(
name="UserIntrest",
joinColumns={ @JoinColumn(name="userId",referencedColumnName="userId") },
inverseJoinColumns={ @JoinColumn(name="intrestId", referencedColumnName="intrestId") }
)
private List<Intrest> intrestList;
----- Getters Setters -----
Intrest.java
@Entity
@Table(name="intrest")
public class Intrest {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int intrestId;
private String intrestName;
public Intrest(String name){
this.intrestName = name;
}
----- Getters & Setters -----
ActionClass.java
public class ActionClass extends ActionSupport {
private User user;
private List<String> intrestList;//for get list of intrest from jsp select tag
private List<Intrest> intrestLst = new ArrayList<Intrest>();
public String execute(){
for(int i = 0;i<intrestList.size();i++){
System.out.print(intrestLst.add(new Intrest(intrestList.get(i))));
}
user.setIntrestList(intrestLst);
SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session session = sf.getCurrentSession();
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
return SUCCESS;
}
----- Getters & Setters -----
所以当我运行它时,它会在用户表中插入用户,在兴趣表中选择兴趣并在用户兴趣表中映射
一切正常,但我不需要在兴趣表中插入兴趣,因为我已经插入了所需的兴趣。
Hibernate: insert into User (password, username) values (?, ?)
Hibernate: insert into intrest (intrestName) values (?)
Hibernate: insert into intrest (intrestName) values (?)
Hibernate: insert into intrest (intrestName) values (?)
Hibernate: insert into intrest (intrestName) values (?)
Hibernate: insert into UserIntrest (userId, intrestId) values (?, ?)
Hibernate: insert into UserIntrest (userId, intrestId) values (?, ?)
Hibernate: insert into UserIntrest (userId, intrestId) values (?, ?)
Hibernate: insert into UserIntrest (userId, intrestId) values (?, ?)
我不想执行
Hibernate: insert into intrest (intrestName) values (?)
Hibernate: insert into intrest (intrestName) values (?)
Hibernate: insert into intrest (intrestName) values (?)
Hibernate: insert into intrest (intrestName) values (?)
查询。
我搜索了很多这个问题,但我找不到任何解决方案。
【问题讨论】:
-
那你为什么用
cascade=CascadeType.ALL? -
@AleksandrM 没有
cascade=CascadeType.ALL当我点击提交按钮时它抛出错误:org.hibernate.TransientObjectException:HTTP Status 500 - object references an unsaved transient instance - save the transient instance before flushing: model.Intrest
标签: java hibernate jpa hibernate-mapping