Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate在列中插入自动编号_Java_Database_Hibernate_Jpa_Hibernate Mapping - Fatal编程技术网

Java Hibernate在列中插入自动编号

Java Hibernate在列中插入自动编号,java,database,hibernate,jpa,hibernate-mapping,Java,Database,Hibernate,Jpa,Hibernate Mapping,各位兄弟姐妹好, 我有一个类,它使用authuserid列、username列和authusertoken列保存userAuthInformatin 我想在每次插入时在authusertoken列中插入uuid号。我学习了Generated(GenerationTime.INSERT),但我不知道具体的方法 package entities; import javax.persistence.Column; import javax.persistence.Entity; import jav

各位兄弟姐妹好,

我有一个类,它使用authuserid列、username列和authusertoken列保存userAuthInformatin

我想在每次插入时在authusertoken列中插入uuid号。我学习了Generated(GenerationTime.INSERT),但我不知道具体的方法

package entities;

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

import org.hibernate.annotations.Generated;
import org.hibernate.annotations.GenerationTime;

@Entity
@Table(name = "authusers")
public class AuthUser {

    @Id
    @GeneratedValue
    private int authuserid;
    @Generated(GenerationTime.INSERT)
    @Column(name = "authusertoken")
    private long authusertoken;
    @Column(name = "username")
    private String username;

    public int getAuthuserid() {
        return authuserid;
    }

    public void setAuthuserid(int authuserid) {
        this.authuserid = authuserid;
    }

    public long getAuthusertoken() {
        return authusertoken;
    }

    public void setAuthusertoken(long authusertoken) {
        this.authusertoken = authusertoken;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

}

您只需使用UUID Java类,并在对象创建时为该令牌字段分配一个值:

@Column(name = "authusertoken", columnDefinition = "BINARY(16)")
private UUID authusertoken = UUID.randomUUID();
如果当前关联行已具有值,则在获取实体时,Hibernate将使用反射设置该值,并使用该行的列值覆盖authusertoken


如果这是一个新对象,则在实例化该对象时,authusertoken将获得一个默认UUID。

看起来,这是一个很好的解决方案。你能解释一下反射的部分并覆盖authusertoken吗?@user3137442,我猜@vladmilcea想说,如果一个对象在DB中已经有值
authusertoken
,那么在获取Hibernate时,当我使用这个解决方案时,它会将DB值覆盖为
authusertoken
。它给我一个错误,说UUID不适用于参数int?也使用私有UUID authusertoken=UUID.randomUUID().toString();解决了存储字符串的问题。