【发布时间】:2013-03-18 21:44:32
【问题描述】:
是否可以在hibernate中设置一个字段在它为空时生成一个值?
这不是主键而是业务键。基本上我有一个带有条形码字段的容器。如果没有指定条码,则自动生成(例如前缀+序号)。
这可能吗,还是我需要创建一个自定义方法来访问下一个序列值?
【问题讨论】:
-
有一个选项可以提供默认值。 default = '' 之类的东西已用于为一个时间戳字段提供默认日期。
是否可以在hibernate中设置一个字段在它为空时生成一个值?
这不是主键而是业务键。基本上我有一个带有条形码字段的容器。如果没有指定条码,则自动生成(例如前缀+序号)。
这可能吗,还是我需要创建一个自定义方法来访问下一个序列值?
【问题讨论】:
看看这个:Hibernate JPA Sequence (non-Id)
我们的想法是为生成的值 BarCode 创建一个实体,然后将其用作主实体的属性:
@Entity
public class BarCode{
private static final String PREFIX = "PREFIX";
@Id
@GeneratedValue(...)
private Long number;
public String getBarCodeValue(){
return PREFIX + getNumber();
}
}
@Entity
public class MyEntity {
@Id ..
private Long id;
@OneToOne(...)
private BarCode barCode;
public String getBarCodeValue(){
return barCode.getBarCodeValue();
}
}
【讨论】:
从类本身为条形码分配值。 试试这样的。
int sequencenumber = generateSequence();
String barcode = prefix + sequencenumber;
我还没有尝试过。所以我不确定这是否可行。试试看吧。
【讨论】: