我想在我的小学中添加一个角色,如B1,B2,B3等等。
我使用sequence来生成主键的数字部分,在我的Entiy类setter方法中,我将B添加到生成的数字中。但是数据库中的主键列总是只用数字[仅序列值]创建,B根本没有附加,也是在调试时我发现在创建这个值时并没有调用setter方法。
我在weblogic 12c中使用Eclipselink2.4,JPA 2。
请指出您的建议和解决方案。
@Id
@Basic(optional = false)
@Column(name = "BUNDLE_MSG_ID")
@SequenceGenerator(name="DB_SEQ", sequenceName="DB_SEQ", allocationSize=1)
@GeneratedValue(strategy= GenerationType.SEQUENCE, generator="DB_SEQ")
private String bundleMsgId;
public String getBundleMsgId() {
return this.bundleMsgId;
}
public void setBundleMsgId(String bundleMsgId) {
if( bundleMsgId != null && !bundleMsgId.startsWith("B")){
this.bundleMsgId = "B"+bundleMsgId;
}
this.bundleMsgId = bundleMsgId;
}
答案 0 :(得分:0)
使用set方法将无法工作,因为数据库会分配序列值,而不是JPA提供程序。提供者从数据库中获取值,而不是相反。
实现此目的的最佳方法可能是在数据库中设置触发器以分配序列,然后JPA Sequence可以使用IDENTITY作为GenerationType读取值。您可能需要指明平台支持IDENTITY,如本文http://dev.eclipse.org/mhonarc/lists/eclipselink-users/msg01320.html
中所述另一种方法是创建自己的自定义排序类,如http://wiki.eclipse.org/EclipseLink/Examples/JPA/CustomSequencing所述。您可以使用org.eclipse.persistence.sequencing.NativeSequence类作为模型,并根据需要添加字符。