java如何设置自动增量属性

时间:2018-11-01 14:41:44

标签: java hibernate jpa

在我的实体中,我有以下代码:

    #!/bin/bash

    #script to extract information from OS instances
    remotesys=$1
    localdir=$2
    keys=$3

    #connect to the OS instance
    ssh -i $keys $remotesys



    # run the lastlog command and store it in a file
    lastlog > log_det.log

    # cpu usage
    cat /proc/cpuinfo > cpu.log

    # memory usage
    cat /proc/meminfo > mem.log

当我尝试保存产品类型的对象时,在DB中,等级值始终保持为0

我可以设置id自动递增以外的属性吗?

4 个答案:

答案 0 :(得分:1)

@Alain Cruz提出的解决方案就是这样!但这只是答案的一半...您将需要:

1)像这样修改rank属性:

@Generated(GenerationTime.INSERT)
@Column(name = "column_name", insertable = false)
Long rank;

2)创建一个插入前触发器,以监视Products实体,检查排名是否为null,您将把该值更改为所需序列返回的新值...

我已经使用这种方法来使用存储在数据库中的SQL函数生成特殊代码...您可以找到更多信息here

答案 1 :(得分:1)

有多种自动生成值的方法,但是必须始终在@Id字段上完成。如果未声明,则将无法自动增加值。

增加ID的策略有多种。在此blog中,您可以了解更多有关它们的信息。对于您的示例,IDENTITY应该可以解决问题。

@Entity
@Table(name = "product")
class Product{   

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    int rank;
}

更新

经过一些研究,似乎Hibernate现在允许自动递增其他非id字段,但为此目的使用了另一个注释。我没有尝试过,但是也许可以。如果您的等级不是您的ID,则可以使用。

@Generated(GenerationTime.INSERT)
@Column(name = "column_name", insertable = false)
int rank;

答案 2 :(得分:0)

@Entity
@Table(name = "product")
class Product{   
...
    @GeneratedValue(strategy=GenerationType.IDENTITY )
    int rank;
}

答案 3 :(得分:0)

下面的方法应该可以工作,如果不能,请尝试以下操作:

@Entity
@Table(name = "product")
class Product{   
...
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int rank;
}

public int getId() {
    return id;
}



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

如果这不起作用,则转到数据库并将rank变量设置为自动递增。