2015-04-27 14 views
7

THIS_.oh-ordnbr "-"JUnit HSQLDB - Kullanıcı ayrıcalığı yoksun veya nesne bulunamadı - Benim sütun adı tire içerdiğinde bir istisna alıyorum

Entity : this is the entity name. 
    @Entity 
    @Table(name = "RequestHeader") 
    public class RequestHeader implements Serializable { 
    .... 
    ....  
    @Column(name = "`oh-ordnbr`") 
    private Integer ohOrdnbr; 

şema tanımlama: Bu şema oluşturma için sorgu .

CREATE MEMORY TABLE PUB.REQUESTHEADER(
      REQUESTID INTEGER, 
      IMUSERID INTEGER, 
      REQUESTDATE DATE, 
      REQUESTTIME INTEGER, 
      REQUESTSTATUS VARCHAR(19), 
      REQUESTTYPE VARCHAR(22), 
      HEADERINSTRUCTIONS VARCHAR(5150), 
      DATEFORMAT VARCHAR(20), 
      TIMEFORMAT VARCHAR(20), 
      LANGUAGEID INTEGER, 
      "OH-ORDNBR" INTEGER, 
      "OH-TRCNSTAMP" INTEGER, 
      ISPICKUPLIST BIT(1), 
      CONSTRAINT "RQH-1" PRIMARY KEY(REQUESTID) 
    ); 

hata

aşağıdaki gibidir:

Exception Stack: Error message which I have received by running the Junit. 
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: THIS_.oh-ordnbr 
at org.hsqldb.error.Error.error(Unknown Source) 
at org.hsqldb.error.Error.error(Unknown Source) 
at org.hsqldb.ExpressionColumn.checkColumnsResolved(Unknown Source) 
at org.hsqldb.QueryExpression.resolve(Unknown Source) 
at org.hsqldb.ParserDQL.compileCursorSpecification(Unknown Source) 
at org.hsqldb.ParserCommand.compilePart(Unknown Source) 
at org.hsqldb.ParserCommand.compileStatement(Unknown Source) 
at org.hsqldb.Session.compileStatement(Unknown Source) 
at org.hsqldb.StatementManager.compile(Unknown Source) 
at org.hsqldb.Session.execute(Unknown Source) 

bazı kimse bu sabitleme bana yardımcı olabilir mi?

+0

HSQLDB belgelerini kontrol ettiniz mi? Çift tırnaktaki sütun adlarının büyük/küçük harfe duyarlı olabileceğini düşünüyorum. Gerçekten tirelere mi ihtiyacınız var? Onları alt çizgilere dönüştürürdüm, bu zaten SQL standardıdır ... – RudolphEst

+0

@RudolphEst Doğru. Lütfen cevap olarak gönderin. Ayrıca THIS_ tablo adı olarak kullanılmamalıdır. – fredt

cevap

10

bulunamadı hatası nesne nedeni oh-ordnbr sütunu (nedeniyle etrafında koymak çift tırnak için bu) harf duyarlı olmaya tanımlandığını gerçektir.

İki olası çözümler vardır:

  1. sizin SQL tire (kısa çizgi) kullanmayın. Zaten kötü bir uygulama, bunun yerine altçizgi kullanın. olarak JPA açıklama şöyle
  2. Güncelleme:

    @Column(name = "`OH-ORDNBR`") 
        private Integer ohOrdnbr; 
    

şiddetle yerine tire kullanmanızı tavsiye, ikinci çözüm kullanırken farklı JPA uygulamaları olabilir ne garabeti bilemezsiniz.

2

Yanıtlarınız için teşekkürler. Hakettiğiniz gibi, hsqldb büyük/küçük harfe duyarlıdır. Şema tanımını değiştirdim ve şimdi çalıştı. Önceden var olan bir db kullandığımız için kodu değiştiremeyiz. Bu yüzden şemayı varolan db ile değiştiriyorum.

0

Eğer HSQL Scripts Java ile çalıştırılırsa ve yeni bir tablo sorgusu ardından/select/update sorguları takip edilirse, "user privilege object yoksunu" atar. Gerçekte, Java İfadeleri ile yürütme sonrasında yaratılan sorgulamalar hiçbir zaman DB'ye işlenmez ve kalıcı değildir ve bizim seç/değiştir/güncellememizi çalıştırır ve istisna ile sonuçlanır. Sorgu satırını satır satırında çalıştırırsak ve her satır için taahhüt verirsek, bu hatayı önleyebiliriz.

0

Yapılandırma dosyanızın doğru sağlayıcısını kontrol edin, org.hibernate.ejb.HibernatePersistence sağlayıcıyı sağlayarak aynı sorunu düzeltdim.

İlgili konular