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

  • infodirt

    infodirt

    11 Mart 2009
  • Kenneth Håkonsen

    Kenneth Håk

    13 Mart 2011
  • Stevie

    Stevie

    2 Mayıs 2010