在我的实体中,我有以下代码:
#!/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自动递增以外的属性吗?
答案 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变量设置为自动递增。