Ek açıklama ile hazırda bekletme kullanan bir j2ee uygulamam var. Pojo sınıfımdaki Id alanına, otomatik artış veya otomatik oluşturulmuş olarak ayarlamak için nasıl açıklama ekleyebilirim? ve fasulyeyi eklerken o alanı fasulyemde boş bırakır mıyım?
Yanıtlar:
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
ve ısrar ederken onu null
( 0
) bırakırsınız . ( null
Kullanırsanız Integer
/ Long
sarmalayıcılarını)
Bazı durumlarda AUTO
strateji, veya yerine SEQUENCE
rathen olarak çözümlenir , bu nedenle manuel olarak veya (temel alınan veritabanına bağlı olarak) olarak ayarlamak isteyebilirsiniz .IDENTITY
TABLE
IDENTITY
TABLE
Sizin için çalışan sıra adını belirtenSEQUENCE
+ görünüyor .
Aşağıdaki gibi yapın: -
@Id
@GenericGenerator(name="kaugen" , strategy="increment")
@GeneratedValue(generator="kaugen")
@Column(name="proj_id")
public Integer getId() {
return id;
}
Kaugen yerine herhangi bir keyfi isim kullanabilirsiniz. İyi çalıştı, konsolda aşağıdaki sorguları görebiliyordum
Hibernate: select max(proj_id) from javaproj
Hibernate: insert into javaproj (AUTH_email, AUTH_firstName, AUTH_lastName, projname, proj_id) values (?, ?, ?, ?, ?)
Bilginize
Net fasulyeleri kullanma veritabanından Yeni Varlık Sınıfları bir ile mysql , * auto_increment * kolon size aşağıdaki ek açıklamalar içeren bir özellik oluşturur:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
@NotNull
private Integer id;
Bu bana sütunun boş olmaması gerektiğini söyleyen bir hatayı alıyordu, bu yüzden @NotNull anotasyonunu null niteliğini bırakarak kaldırdım ve işe yarıyor!
Hazırda bekletme, beş tür tanımlayıcı oluşturma stratejisi tanımlar:
OTO - temel alınan DB'ye bağlı olarak kimlik sütunu, sıra veya tablo
TABLO - kimliği tutan tablo
IDENTITY - kimlik sütunu
SEQUENCE - sıra
kimlik kopyası - kimlik başka bir varlıktan kopyalanır
Tablo kullanarak örnek
@Id
@GeneratedValue(strategy=GenerationType.TABLE , generator="employee_generator")
@TableGenerator(name="employee_generator",
table="pk_table",
pkColumnName="name",
valueColumnName="value",
allocationSize=100)
@Column(name="employee_id")
private Long employeeId;
daha fazla ayrıntı için bağlantıya bakın .
Otomatik olarak artırmak istediğiniz sayısal bir sütununuz varsa, columnDefinition
doğrudan ayarlamak bir seçenek olabilir . Bu, şema hazırda bekletme olmadan kullanılsa bile değeri otomatik olarak oluşturması avantajına sahiptir. Bu, kodunuzu db'ye özgü hale getirebilir:
import javax.persistence.Column;
@Column(columnDefinition = "serial") // postgresql
PK Seri türü olduğunda Informix tablosu için stratejiler ararken bu SO sorusundaki herhangi birinin "çarpması" durumunda .
Bunun işe yaradığını buldum ... bir örnek olarak.
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "special_serial_pk")
private Integer special_serial_pk;
Bunun çalışması için, session.SaveOrUpdate yaptığınızda özel_serial_pk NULL sütununun değerini ilettiğinizden emin olun .
Benim durumumda JSON ile böyle bir HTML POST yapıyorum ...
{
"special_serial_pk": null, //<-- Field to be incremented
"specialcolumn1": 1,
"specialcolumn2": "I love to code",
"specialcolumn3": true
}
Netbeans Veritabanından Yeni Varlık Sınıflarını bir mysql auto_increment sütunuyla kullanmak, aşağıdaki hibernate.hbm.xml ile bir öznitelik oluşturur: id, otomatik artış