У меня есть столбец в моем 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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Что я пропускаю?
Возможно, вам нужно пометить свое поле с помощью @id
и не указывать свойство generator
.
Как показано в Аннотация спящего режима - 2.2.3.1. При создании свойства идентификатора в следующем примере используется генератор идентификаторов:
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
public Long getId() { ... }
эта комбинация мне подходит:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Вы не можете использовать генераторы для составных ключей
Когда вы используете @Embeddable
или @EmbeddedId
, значения первичного ключа должны быть предоставлены приложением (т.е. состоять из негенерируемых значений). Ваша аннотация @GeneratedValue
просто игнорируется.
Вот пример, как это сделать
@Id
@Column(name = "col_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long colId;