2014-01-27 6 views
0

Я использую SQL Server 2008R2 для моего приложения для Java. Теперь я хочу, чтобы при сохранении компонента он столбец Идентификатора автоматически обновлялся. Моя сущность боб:Auto Increment Использование @ Сгенерировано

@Entity 
@Table(name = "BANK_MASTER") 
@XmlRootElement 
public class BankMaster implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id  
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @NotNull 
    @Column(name = "BANK_ID") 
    private Long bankId; 

    @Size(max = 30) 
    @Column(name = "BANK_NAME") 
    private String bankName; 

    @Size(max = 25) 
    @Column(name = "IP_ADDRESS") 
    private String ipAddress; 

    @Size(max = 255) 
    @Column(name = "URL") 
    private String url; 

    @Size(max = 1) 
    @Column(name = "FORM_METHOD") 
    private String formMethod; 

    @Size(max = 1) 
    @Column(name = "SECURED") 
    private String secured; 

    @Column(name = "ACTIVEFLAG") 
    private Short activeflag; 

    @Column(name = "ENABLED") 
    private Short enabled; 

    @OneToMany(mappedBy = "bankId") 
    private Collection<BankBranchMaster> bankBranchMasterCollection; 

    @JoinColumn(name = "PARTNER_ID", referencedColumnName = "UA_ID") 
    @ManyToOne 
    private PartnerAccount partnerId; 
} 

Однако, когда я настойчив боб дает ошибку ограничения. Моя таблица создания запроса выглядит следующим образом:

CREATE TABLE [dbo].[BANK_MASTER](
[BANK_ID] [numeric](10, 0) IDENTITY(105,1) NOT NULL, 
[BANK_NAME] [varchar](30) NULL, 
[IP_ADDRESS] [varchar](25) NULL, 
[URL] [varchar](255) NULL, 
[FORM_METHOD] [varchar](1) NULL, 
[SECURED] [varchar](1) NULL, 
[PARTNER_ID] [numeric](10, 0) NULL, 
[ACTIVEFLAG] [numeric](1, 0) NULL, 
[ENABLED] [numeric](1, 0) NULL 
+0

Точные ошибки: javax.validation.ConstraintViolationException: Bean Validation ограничение (s) нарушается при выполнении автоматического Bean Validation на события обратного вызова: «» prePersist типа –

+0

Идентичность предполагается использовать с MS SQL ... Ранее мы имел оракул 11g, и мы успешно использовали генератор последовательности и последовательности для нашей потребности в генерации генератора –

ответ

0

Вы добавили @NotNull в id собственности. Это означает, что JPA будет проверять, что этот идентификатор не имеет значения null до его сохранения. Но идентификатор является нулевым, поскольку он будет сгенерирован после, по базе данных. Таким образом, аннотация NotNull находится в прямом противоречии с тем, что она автоматически генерируется идентичностью.

Просто удалите @NotNull аннотация из id.

+0

Есть ли лучший способ, чем использование типа генерации идентификатора. Как теперь использовать Identity Type, мне нужно будет обновить весь мой код, где я сохраню, введя em.flush(), прежде чем я смогу использовать сгенерированный идентификатор по базе данных? –

+0

Я никогда не использовал SQL-сервер и не знаю, поддерживает ли он последовательности. Вы можете использовать генерацию таблицы, которая должна работать на любом движке. –