gpt4 book ai didi

java - 如何更改hibernate为主键字段插入的默认值?

转载 作者:行者123 更新时间:2023-11-29 13:27:37 25 4
gpt4 key购买 nike

我有一个名为 users 的类,其中有一个主键 userid ...现在,当我将此类的对象放入 MYSql 数据库中(该数据库创建一个名为 users 的表)时,Hibernate 会放置一个主键值为 0 的默认行其余字段为空...

当我使用 @Column(name="userid", Columndefintion="int default -1") 时,它仍然将 userid 的值设置为 0,这是我不想要的。

USER.Java
package schema;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;



@Entity
public class users {

@Id
public int userid;

private String username;
private String pw;
private String fname;
private String lname;
private String gender;
private String dob;
private String jdate;
private String ldate;
private String address;
private String email;
private String tel;

@Column(name="pic")
@Lob
private byte[] pic;

@Column(name="tpic")
@Lob
private byte[] tpic;

public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
public String getLname() {
return lname;
}
public void setLname(String lname) {
this.lname = lname;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getDob() {
return dob;
}
public void setDob(String dob) {
this.dob = dob;
}
public String getJdate() {
return jdate;
}
public void setJdate(String jdate) {
this.jdate = jdate;
}
public String getLdate() {
return ldate;
}
public void setLdate(String ldate) {
this.ldate = ldate;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public byte[] getPic() {
return pic;
}
public void setPic(byte[] pic) {
this.pic = pic;
}
public byte[] getTpic() {
return tpic;
}
public void setTpic(byte[] tpic) {
this.tpic = tpic;
}


}


Hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!--
~ Hibernate, Relational Persistence for Idiomatic Java
~
~ Copyright (c) 2010, Red Hat Inc. or third-party contributors as
~ indicated by the @author tags or express copyright attribution
~ statements applied by the authors. All third-party contributions are
~ distributed under license by Red Hat Inc.
~
~ This copyrighted material is made available to anyone wishing to use, modify,
~ copy, or redistribute it subject to the terms and conditions of the GNU
~ Lesser General Public License, as published by the Free Software Foundation.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
~ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
~ for more details.
~
~ You should have received a copy of the GNU Lesser General Public License
~ along with this distribution; if not, write to:
~ Free Software Foundation, Inc.
~ 51 Franklin Street, Fifth Floor
~ Boston, MA 02110-1301 USA
-->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

<!-- Database connection settings -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/bg</property>
<property name="connection.username">root</property>
<property name="connection.password"/>


<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>


<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>

<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>

<mapping class="schema.friendship"/>
<mapping class="schema.users"/>
<mapping class="schema.resources"/>
<mapping class="schema.manipulation"/>



</session-factory>

</hibernate-configuration>

有没有办法可以插入不同的默认值,因为当我在创建后尝试再次加载数据时,当我尝试插入 userid=0 时,它说 Caused by: java.sql.BatchUpdateException: Duplicate Entry '0' for键“主要”

同时使用 hbm2ddl.auto 作为更新不会更新现有的 0,null,null ... 列..为什么?

最佳答案

如果您想要为每一行的 userid 列自动分配不同的值,您可以使用 @GenerateValue 注释,例如:

@Id @GeneratedValue(strategy=GenerationType.TABLE)
public int userid;

请参阅 JPA/Hibernate 文档,了解可用的不同生成策略。

关于java - 如何更改hibernate为主键字段插入的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19916476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com