SORU
4 Kasım 2010, PERŞEMBE


Nasıl JPA ek açıklamalar ile MYSQL otomatik artış alan açıklama için

Doğrudan sadede gelelim, sorun MySQL DB içine nesne Operatör kurtarıyor. Önce kaydetmek için, bu tablodan seçmek için çalışıyorum ve işe yarıyor, bu yüzden db bağlantısı.

Burada Operatör benim nesne:

@Entity
public class Operator{

   @Id
   @GeneratedValue
   private Long id;

   private String username;

   private String password;


   private Integer active;

   //Getters and setters...
}

EntityManagerJPA kullanmak’s persist yöntem. ben kurtarmak için

Burada bazı günlük:

Hibernate: insert into Operator (active, password, username, id) values (?, ?, ?, ?)
com.mysql.jdbc.JDBC4PreparedStatement@15724a0: insert into Operator (active,password, username, id) values (0, 'pass', 'user', ** NOT SPECIFIED **)

Gördüğüm kadarıyla, sorun otomatik arttırma ile yapılandırma Ama nerede çözemiyorum.

Denedim bazı hileler burada gördüm: Hibernate not respecting MySQL auto_increment primary key field Ama hiçbir şey çalıştı

Eğer başka yapılandırma dosyaları gerekiyorsa onları temin edeceğim.

DDL:

CREATE TABLE `operator` ( 
`id` INT(10) NOT NULL AUTO_INCREMENT,
`first_name` VARCHAR(40) NOT NULL,
`last_name` VARCHAR(40) NOT NULL,
`username` VARCHAR(50) NOT NULL,
`password` VARCHAR(50) NOT NULL,
`active` INT(1) NOT NULL,
PRIMARY KEY (`id`)
)

CEVAP
5 Kasım 2010, Cuma


AUTO_INCREMENT MySQL sütun kullanmak için IDENTITY bir strateji kullanmak gerekiyor

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;

MySQL ile: AUTO kullanırken olsun istiyorum

@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;

Aslında eşdeğerdir

@Id @GeneratedValue
private Long id;

Diğer bir deyişle, eşleme çalışması gerekir. Ama Hazırda bir SQL ınsert deyimi id sütunu atlamak gerekir, ve değildir. Uyumsuzluk bir tür olmalı.

Hazırda yapılandırma MySQL lehçesi (muhtemelen MySQL5InnoDBDialect yada kullandığınız motora bağlı olarak MySQL5Dialect) belirtmek mü?

Ayrıca, tabloyu kim yarattı? İlgili DDL gösterebilir misin?

Takip:Senin sorunun sunamayacağı. Kod kullanarakseninvarlık veseninDDL, Hazırda MySQL ile (beklenen) aşağıdaki SQL oluşturur:

insert 
into
    Operator
    (active, password, username) 
values
    (?, ?, ?)

id sütun beklendiği gibi yukarıdaki ifade yoktur, unutmayın.

, Kodu, tanımı ve lehçesi doğru ve tutarlı bir tablo özetle, çalışması gerekir. Eğer değil sizin için belki bir şey çıkar sync (temiz bir yapı, çift onay inşa dizini, vb) veya başka bir şey yanlış (onay günlükleri için şüpheli bir şey).

Lehçesi ile ilgilisadeceMySQL5Dialect MySQL5InnoDBDialect arasındaki fark DDL oluştururken daha sonra ENGINE=InnoDB tablo nesneleri ekler. Ya biri, ya diğeri kullanılarak oluşturulan SQL değiştirmez.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chanre Joubert

    Chanre Joube

    27 Temmuz 2012
  • Gee Cee

    Gee Cee

    1 AĞUSTOS 2009
  • kidrauhl

    kidrauhl

    15 Ocak 2007