2016-03-31 29 views
1

Spring veri tutmayı, JPA sağlayıcısı olarak hazırda bekleterek MySql ile kullanmaya çalışıyorum.bahar veri istirahati hazırda bekletme, tüm tablo adlarının alt kasasıdır ve gözardı edilir @Table ("Ad")

Sorguda kullanılan tablo adlarının, sınıfın basit adıyla eşleşmesini istiyorum; Daha fazla bir şey yok. Bunu nasıl başarabilirim?

Tüm adlandırma stratejilerini denedim ve hiç bir etkisi yok gibi görünüyor.

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'TEST.worker' Buna ek olarak, ben

@Table("Foo") 

ekledik Ve de burada

küçük harfli alır hatadır

@Entity 
public class Worker { 
    private Long id; 
    private String givenName; 
    private String familyName; 
    private LocalDate dob; 
    private String nationalId; 
    private byte[] photo; 

    public Worker() { 
     this.id = Math.abs(new Random().nextLong()); 
    } 

    @Id 
    @Column(name = "ID") 
    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    @Basic 
    @Column(name = "GivenName") 
    public String getGivenName() { 
     return givenName; 
    } 

    public void setGivenName(String givenName) { 
     this.givenName = givenName; 
    } 

    @Basic 
    @Column(name = "FamilyName") 
    public String getFamilyName() { 
     return familyName; 
    } 

    public void setFamilyName(String familyName) { 
     this.familyName = familyName; 
    } 

    @Basic 
    @Column(name = "DOB") 
    public LocalDate getDob() { 
     return dob; 
    } 

    public void setDob(LocalDate dob) { 
     this.dob = dob; 
    } 

    @Basic 
    @Column(name = "NationalID") 
    public String getNationalId() { 
     return nationalId; 
    } 

    public void setNationalId(String nationalId) { 
     this.nationalId = nationalId; 
    } 

    @Basic 
    @Column(name = "photo") 
    public byte[] getPhoto() { 
     return photo; 
    } 

    public void setPhoto(byte[] photo) { 
     this.photo = photo; 
    } 
} 

Benim ilgili yapılandırma:

İşte

yok varlıktır: Yay verilerinden

spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect 
spring.jpa.show-sql=true 
spring.jpa.generate-ddl = false 
spring.jpa.hibernate.ddl-auto = none 
spring.jpa.hibernate.naming-strategy=org.springframework.boot.orm.jpa.hibernate.SpringNamingStrategy 

Geçişli bağımlılıkları:

[INFO] | +- org.hibernate:hibernate-entitymanager:jar:4.3.11.Final:compile 
[INFO] | | +- org.hibernate:hibernate-core:jar:4.3.11.Final:compile 
[INFO] | | +- org.hibernate.common:hibernate-commons-annotations:jar:4.0.5.Final:compile 
[INFO] | | \- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile 

This link geçerli değildir;

+0

[Bu soruda] sağlanan çözümlerden herhangi birini (http://stackoverflow.com/questions/28571848/spring-boot-jpa-insert-in-table-with-uppercase-name) sizin için çalışır mı? – Chatoyancy

+0

Hangi Hazırda Bekletme sürümünü kullanıyorsunuz? –

+0

@Chatoyancy Evet, aslında. Yanlışlıkla kendimden geldim ama senin bağlantıların çalışıyor. İsterseniz cevap olarak sağladı. Temelde bu tablo ismine nasıl geldiğini anlamak için yığın yoluma geri çekildim ve oraya ulaşmak için intellij'den bazı otomatik tamamlandı. Daha önce bulamadım çünkü yanlış soruyu soruyormuş gibi görünüyordu ve bu bana işletim sistemi ile ilgili cevaplara yöneliyordu. –

cevap

2

SpringNamingStrategy kullandığınız için, Hibernate'ten ImprovedNamingStrategy ile aynı değerleri kullanır (doğrulayın here).

ImprovedNamingStrategy için bağlantıyı denetlerseniz, tableName için varsayılan davranışın, durumunuz gibi görünen tüm karışık durum adlarını küçük harfle işaret ettiğini görürsünüz.

+0

Evet, bunu keşfettim ve bunu EJB stratejisine değiştirdim. Teşekkürler! –

+0

Ayrıca, stratejiyi genişletebilir ve EJB stratejisi gereksinimlerinize uymuyorsa, yalnızca bu davranışı değiştirebilirsiniz. – dambros

+0

Aynı problem vardı. Http://stackoverflow.com/questions/28571848/spring-boot-jpa-insert-in-table adresinde açıklandığı gibi spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImp kullanarak -with-largecase-ile-hibernate sorunu çözdü – 5im