使用EclipseLink在JPA中向主键添加字符

时间:2013-10-07 09:33:31

标签: jpa eclipselink weblogic12c

我想在我的小学中添加一个角色,如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;
    }

1 个答案:

答案 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类作为模型,并根据需要添加字符。