在hibernate中我想同一个jsp页面,同一个按钮,如何实现如果数据库没有就insert,如果数据库有就update.
========LineDetail.hbm.xml===========
<hibernate-mapping>
<class name="fatcat.db.LineDetail" table="line_detail">
<id name="line_bh" type="java.lang.String">
<column name="line_bh" length="30" />
<generator class="assigned" />
</id>
<property name="content" type="java.lang.String" column="content" />
<one-to-one name="line" class="fatcat.db.Line" property-ref="LineDetail" cascade="all"/>
</class>
</hibernate-mapping>
========Line.hbm.xml===========
<hibernate-mapping>
<class name="fatcat.db.Line" table="line" >
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="lineName" type="java.lang.String" column="line_name" length="250"/>
<many-to-one name="LineDetail" class="fatcat.db.LineDetail" column="bh" cascade="all" unique="true" />
</class>
</hibernate-mapping>
========Line.java====
public class Line {
private LineDetail LineDetail;
private Integer id;
private String bh;
private String lineName; public Line() {} public Integer getId() {return this.id;}
public void setId(Integer id) {this.id = id;} public String getBh() {return this.bh;}
public void setBh(String bh) {this.bh = bh;} public String getLineName() {return this.lineName;}
public void setLineName(String lineName) {this.lineName = lineName;} public LineDetail getLineDetail() {return LineDetail;}
public void setLineDetail(LineDetail lineDetail) {this.LineDetail = lineDetail;}
}
====LineDetail.java====
public class LineDetail {
private String line_bh;
private String content;
private Line line; public Line getLine() {return line;}
public void setLine(Line line) {this.line = line;} public LineDetail() {}
public LineDetail(String content) {this.content = content;} public String getline_bh() {return this.line_bh;}
public void setline_bh(String line_bh) {this.line_bh = line_bh;} public String getContent() {return this.content;}
public void setContent(String content) {this.content = content;}
} //实现了保存,但是如何让这段代码实现,如何数据库没有就insert,如果书库有就update
Line line = new Line();
line.setBh("123456789");
line.setLineName("海南旅游线路");
LineDetail line_detail = new LineDetail();
line_detail.setContent("asdfasfasfasfdasfafwef");
line_detail.setline_bh("123456789");
System.out.println("line_bh:="+line_detail.getline_bh());line.setLineDetail(line_detail);
line_detail.setLine(line);this.line_service.save_all(line_detail);
========LineDetail.hbm.xml===========
<hibernate-mapping>
<class name="fatcat.db.LineDetail" table="line_detail">
<id name="line_bh" type="java.lang.String">
<column name="line_bh" length="30" />
<generator class="assigned" />
</id>
<property name="content" type="java.lang.String" column="content" />
<one-to-one name="line" class="fatcat.db.Line" property-ref="LineDetail" cascade="all"/>
</class>
</hibernate-mapping>
========Line.hbm.xml===========
<hibernate-mapping>
<class name="fatcat.db.Line" table="line" >
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="lineName" type="java.lang.String" column="line_name" length="250"/>
<many-to-one name="LineDetail" class="fatcat.db.LineDetail" column="bh" cascade="all" unique="true" />
</class>
</hibernate-mapping>
========Line.java====
public class Line {
private LineDetail LineDetail;
private Integer id;
private String bh;
private String lineName; public Line() {} public Integer getId() {return this.id;}
public void setId(Integer id) {this.id = id;} public String getBh() {return this.bh;}
public void setBh(String bh) {this.bh = bh;} public String getLineName() {return this.lineName;}
public void setLineName(String lineName) {this.lineName = lineName;} public LineDetail getLineDetail() {return LineDetail;}
public void setLineDetail(LineDetail lineDetail) {this.LineDetail = lineDetail;}
}
====LineDetail.java====
public class LineDetail {
private String line_bh;
private String content;
private Line line; public Line getLine() {return line;}
public void setLine(Line line) {this.line = line;} public LineDetail() {}
public LineDetail(String content) {this.content = content;} public String getline_bh() {return this.line_bh;}
public void setline_bh(String line_bh) {this.line_bh = line_bh;} public String getContent() {return this.content;}
public void setContent(String content) {this.content = content;}
} //实现了保存,但是如何让这段代码实现,如何数据库没有就insert,如果书库有就update
Line line = new Line();
line.setBh("123456789");
line.setLineName("海南旅游线路");
LineDetail line_detail = new LineDetail();
line_detail.setContent("asdfasfasfasfdasfafwef");
line_detail.setline_bh("123456789");
System.out.println("line_bh:="+line_detail.getline_bh());line.setLineDetail(line_detail);
line_detail.setLine(line);this.line_service.save_all(line_detail);
如果
Line line=new Line();
是insert
Line line=new Line();
line.setId(2);
是update
这怎么能说是JAVA次呢?
面向方法某些时候是简单,但结构上和面向对象没法比
循环比较 太麻烦,直接用你的数据中的一个unique并且not-null的字段来查数据库,如果得到的对象是null,就用insert,否则就是update
line.setBh("123456789");
line.setLineName("海南旅游线路");
//line.setId(id); 仅凭这一个问题说JAVA太次>>>.... LZ是不是搞程序的.或者你可以先发一条SQL查询下有没有"海南旅游线路"这个名字,然后再INSERT.
HIBERNATE也不可能这么智能的.必然是先查询才知道有没有,PROXY先加载ID,而不是NAME,所以你没有 设置ID,不可能实现的.但像上面设置ID似乎也不行.会出现重复ID,插入错误.通常外面传进来不是这种形式.会有ID的.
所以先
Line l=searchByName(name); 这个方法查询是否存在name的Line对象.
然后 if(l!=null){
l.setBh();
l.setLineName();
}else{
l=new Line();
l.setBh();
l.setLineName();
}