0

我想在我的主要角色中添加一个角色,如 B1、B2、B3 等等。

我正在使用序列来生成主键的数字部分,并且在我的 Entiy 类设置器方法中,我将 B 添加到生成的数字中。但是数据库中的主键comumn总是只用数字[仅序列值]创建,根本没有附加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;
    }
4

1 回答 1

0

使用 set 方法将不起作用,因为数据库分配了序列值,而不是 JPA 提供程序。提供者从数据库中获取价值,而不是相反。

完成此操作的最佳方法可能是在数据库中设置触发器来分配序列,然后 JPA 序列可以使用 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 类作为模型,并根据需要添加字符。

于 2013-10-09T12:43:26.613 回答