Будьте в спящем режиме Автоинкремент не работа

У меня есть столбец в моем DB, который установлен с Идентификационными данными (1,1), и я не могу добраться, в спящем режиме аннотации для работы на него. Я получаю ошибки, когда я пытаюсь создать новую запись.

В моем объекте у меня есть следующее.

@Entity
@Table(schema="dbo", name="MemberSelectedOptions")
public class MemberSelectedOption extends BampiEntity implements Serializable {

    @Embeddable
    public static class MSOPK implements Serializable {
        private static final long serialVersionUID = 1L;

        @Column(name="SourceApplication")
        String sourceApplication;

        @Column(name="GroupId")
        String groupId;

        @Column(name="MemberId")
        String memberId;

        @Column(name="OptionId")
        int optionId;

        @GeneratedValue(strategy=GenerationType.IDENTITY, generator="native")
        @Column(name="SeqNo", unique=true, nullable=false)
        BigDecimal seqNo;

        //Getters and setters here...

    }

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    MSOPK pk = new MSOPK();

    @Column(name="OptionStatusCd")
    String optionStatusCd;

    @Column(name="EffectiveDate")
    Date effectiveDate;

    @Column(name="TermDate")
    Date termDate;

    @Column(name="SelectionStatusDate")
    Date selectionStatusDate;   

    @Column(name="SysLstUpdtUserId")
    String sysLstUpdtUserId = Globals.WS_USER_ID;;

    @Column(name="SysLstTrxDtm")
    Date sysLstTrxDtm = new Date();

    @OneToMany(mappedBy="option")
    List<MemberSelectedVariable> variables = 
                             new ArrayList<MemberSelectedVariable>();

        //More Getters and setters here...
}

Но когда я пытаюсь добавить новую запись, я получаю следующую ошибку.

Не может вставить явное значение для столбца идентификационных данных в таблице 'MemberSelectedOptions', когда IDENTITY_INSERT установлен на ПРОЧЬ. Я не хочу устанавливать IDENTIY_INSERT на НА ТОМ, потому что я хочу, чтобы столбец идентификационных данных в дб управлял значениями.

SQL, который выполняется, следующий; где можно ясно видеть вставку.

insert into dbo.MemberSelectedOptions 
  (OptionStatusCd, 
  EffectiveDate,
  TermDate, 
  SelectionStatusDate, 
  SysLstUpdtUserId, 
  SysLstTrxDtm, 
  SourceApplication,
  GroupId,
  MemberId, 
  OptionId, 
  SeqNo) 
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

Что я пропускаю?

5
задан Pascal Thivent 13 October 2010 в 07:39
поделиться

5 ответов

Возможно, вам нужно пометить свое поле с помощью @id и не указывать свойство generator .

Как показано в Аннотация спящего режима - 2.2.3.1. При создании свойства идентификатора в следующем примере используется генератор идентификаторов:

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
public Long getId() { ... } 
0
ответ дан 15 December 2019 в 06:18
поделиться

эта комбинация мне подходит:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
1
ответ дан 15 December 2019 в 06:18
поделиться

Вы не можете использовать генераторы для составных ключей

0
ответ дан 15 December 2019 в 06:18
поделиться

Когда вы используете @Embeddable или @EmbeddedId, значения первичного ключа должны быть предоставлены приложением (т.е. состоять из негенерируемых значений). Ваша аннотация @GeneratedValue просто игнорируется.

1
ответ дан 15 December 2019 в 06:18
поделиться

Вот пример, как это сделать

@Id
@Column(name = "col_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long             colId;
1
ответ дан 15 December 2019 в 06:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: