2012-10-13 38 views
15

मुझे एक बहुत ही अजीब समस्या है, जब मैंने परियोजना में कुछ डीपी को अपग्रेड किया तो इसे मिला।एचएसक्यूएलडीबी के साथ हाइबरनेट 4.1 'डेटा अपवाद देता है: स्ट्रिंग डेटा, दाएं छंटनी'

मैं अब निम्नलिखित संस्करणों का उपयोग कर रहा हूँ:

  • स्प्रिंग: 3.1.0.RELEASE
  • हाइबरनेट: 4.1.7.Final
  • HSQLDB: 2.2.8 (org.hsqldb)

मुझे लगता है कि समस्या को फ़ाइल फ़ील्ड के साथ कुछ करना है। (Dbfile.content)

स्टैकट्रेस: ​​

javax.persistence.PersistenceException: org.hibernate.exception.DataException: could not insert: [org.project.model.Cv] 
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387) 
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1315) 
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1321) 
    at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:843) 
    at sun.reflect.GeneratedMethodAccessor11.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240) 
    at $Proxy36.persist(Unknown Source) 
    at org.project.dao.jpa.GenericDaoJpa.save(GenericDaoJpa.java:49) 
    at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
    at $Proxy40.save(Unknown Source) 
    at org.project.dao.CvDaoTest.updateTest(CvDaoTest.java:77) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) 
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83) 
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
Caused by: org.hibernate.exception.DataException: could not insert: [org.project.model.Cv] 
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:102) 
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64) 
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2345) 
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2852) 
    at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71) 
    at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273) 
    at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:320) 
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203) 
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129) 
    at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:69) 
    at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:179) 
    at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:135) 
    at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61) 
    at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:808) 
    at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:782) 
    at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:786) 
    at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:837) 
    ... 45 more 
Caused by: java.sql.SQLDataException: data exception: string data, right truncation 
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source) 
    at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(Unknown Source) 
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105) 
    at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94) 
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57) 
    ... 60 more 
Caused by: org.hsqldb.HsqlException: data exception: string data, right truncation 
    at org.hsqldb.error.Error.error(Unknown Source) 
    at org.hsqldb.error.Error.error(Unknown Source) 
    at org.hsqldb.types.BinaryType.castOrConvertToType(Unknown Source) 
    at org.hsqldb.types.BinaryType.convertToType(Unknown Source) 
    at org.hsqldb.StatementDML.getInsertData(Unknown Source) 
    at org.hsqldb.StatementInsert.getInsertValuesNavigator(Unknown Source) 
    at org.hsqldb.StatementInsert.getResult(Unknown Source) 
    at org.hsqldb.StatementDMQL.execute(Unknown Source) 
    at org.hsqldb.Session.executeCompiledStatement(Unknown Source) 
    at org.hsqldb.Session.execute(Unknown Source) 
    ... 65 more 

कंसोल:

INFO : org.hibernate.engine.jdbc.JdbcSupportLoader - Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException 
Hibernate: insert into Nationality (id, countryCode) values (default, ?) 
Hibernate: insert into Language (id, countryCode, languageCode) values (default, ?, ?) 
Hibernate: insert into Person (id, birthdate, created, email, enabled, firstName, image, lastName, lastUpdate, nationality_id, password, role, salt) values (default, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 
Hibernate: insert into Nationality (id, countryCode) values (default, ?) 
Hibernate: insert into Person (id, birthdate, created, email, enabled, firstName, image, lastName, lastUpdate, nationality_id, password, role, salt) values (default, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 
Hibernate: insert into Company (id, name) values (default, ?) 
Hibernate: insert into Language (id, countryCode, languageCode) values (default, ?, ?) 
Hibernate: insert into Company (id, name) values (default, ?) 
Hibernate: insert into Skill (id, company_id, created, isCategory, lastUpdate, skill_fk) values (default, ?, ?, ?, ?, ?) 
Hibernate: insert into Company (id, name) values (default, ?) 
Hibernate: insert into Skill (id, company_id, created, isCategory, lastUpdate, skill_fk) values (default, ?, ?, ?, ?, ?) 
Hibernate: insert into Nationality (id, countryCode) values (default, ?) 
Hibernate: insert into Person (id, birthdate, created, email, enabled, firstName, image, lastName, lastUpdate, nationality_id, password, role, salt) values (default, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 
Hibernate: insert into CourseExperience (created, lastUpdate, lastUpdatePerson_id, person_fk, endDate, startDate, id) values (?, ?, ?, ?, ?, ?, ?) 
Hibernate: insert into Nationality (id, countryCode) values (default, ?) 
Hibernate: insert into Person (id, birthdate, created, email, enabled, firstName, image, lastName, lastUpdate, nationality_id, password, role, salt) values (default, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 
Hibernate: insert into CourseExperience (created, lastUpdate, lastUpdatePerson_id, person_fk, endDate, startDate, id) values (?, ?, ?, ?, ?, ?, ?) 
Hibernate: insert into Cv (id, company, created, language, lastUpdate, lastUpdatePerson_id, name, person_fk, summary_id) values (default, ?, ?, ?, ?, ?, ?, ?, ?) 
WARN : org.hibernate.util.JDBCExceptionReporter - SQL Error: -3401, SQLState: 22001 
ERROR: org.hibernate.util.JDBCExceptionReporter - data exception: string data, right truncation 

Cv.java:

package org.project.model; 

import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 

import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToMany; 
import javax.persistence.ManyToOne; 
import javax.persistence.OneToMany; 
import javax.persistence.OrderBy; 
import javax.persistence.OrderColumn; 
import javax.persistence.PrePersist; 
import javax.persistence.PreUpdate; 
import javax.persistence.Temporal; 
import javax.persistence.TemporalType; 

import org.project.model.interfaces.DomainObject; 

@Entity 
public class Cv implements DomainObject { 

    private static final long serialVersionUID = -9111485038728016755L; 

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

    @Column(nullable = false) 
    private String name; 

    @ManyToOne 
    @JoinColumn(name = "person_fk") 
    private Person person; 

    @ManyToMany 
    private List<Skill> skills = new ArrayList<Skill>(); 

    @ManyToOne 
    private Summary summary; 

    @ManyToMany(targetEntity = Experience.class) 
    @OrderColumn(name = "index") 
    private List<Experience> experiences = new ArrayList<Experience>(); 

    @Temporal(TemporalType.TIMESTAMP) 
    @Column(updatable = false, insertable = true) 
    private Date created; 

    @Temporal(TemporalType.TIMESTAMP) 
    private Date lastUpdate; 

    @ManyToOne(optional = false) 
    private Person lastUpdatePerson; 

    @Column(nullable = false) 
    private Language language; 

    @Column(nullable = false) 
    private Company company; 

    @OneToMany(orphanRemoval = true, cascade = CascadeType.ALL, targetEntity = DbFile.class) 
    @OrderBy("created DESC") 
    private List<DbFile> files = new ArrayList<DbFile>(); 

    @PrePersist 
    @PreUpdate 
    protected void updateDates() { 
     Date now = new Date(); 
     if (this.created == null) { 
      this.created = new Date(now.getTime()); 
     } 
     this.lastUpdate = now; 
    } 

    public Long getId() { 
     return id; 
    } 

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

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public Person getPerson() { 
     return person; 
    } 

    public void setPerson(Person person) { 
     this.person = person; 
    } 

    public List<Skill> getSkills() { 
     return skills; 
    } 

    public void setSkills(List<Skill> skills) { 
     this.skills = skills; 
    } 

    public List<Experience> getExperiences() { 
     return experiences; 
    } 

    public void setExperiences(List<Experience> experiences) { 
     this.experiences = experiences; 
    } 

    public Date getCreated() { 
     return created; 
    } 

    public void setCreated(Date created) { 
     this.created = created; 
    } 

    public Date getLastUpdate() { 
     return lastUpdate; 
    } 

    public void setLastUpdate(Date lastUpdate) { 
     this.lastUpdate = lastUpdate; 
    } 

    public Person getLastUpdatePerson() { 
     return lastUpdatePerson; 
    } 

    public void setLastUpdatePerson(Person lastUpdatePerson) { 
     this.lastUpdatePerson = lastUpdatePerson; 
    } 

    public void addSkill(Skill skill) { 
     this.skills.add(skill); 
    } 

    public void addExperience(Experience experience) { 
     this.experiences.add(experience); 
    } 

    public Summary getSummary() { 
     return summary; 
    } 

    public void setSummary(Summary summary) { 
     this.summary = summary; 
    } 

    public List<DbFile> getFiles() { 
     return files; 
    } 

    public void setFiles(List<DbFile> files) { 
     this.files = files; 
    } 

    public void addFile(DbFile file) { 
     this.files.add(file); 
    } 

    public Company getCompany() { 
     return company; 
    } 

    public void setCompany(Company company) { 
     this.company = company; 
    } 

    public Language getLanguage() { 
     return language; 
    } 

    public void setLanguage(Language language) { 
     this.language = language; 
    } 

    @Override 
    public int hashCode() { 
     final int prime = 31; 
     int result = 1; 
     result = prime * result + ((id == null) ? 0 : id.hashCode()); 
     return result; 
    } 

    @Override 
    public boolean equals(Object obj) { 
     if (this == obj) 
      return true; 
     if (obj == null) 
      return false; 
     if (getClass() != obj.getClass()) 
      return false; 
     Cv other = (Cv) obj; 
     if (id == null) { 
      if (other.id != null) 
       return false; 
     } else if (!id.equals(other.id)) 
      return false; 
     return true; 
    } 
} 

DbFile.java:

package org.project.model; 

import java.util.Date; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Lob; 
import javax.persistence.PrePersist; 
import javax.persistence.Temporal; 
import javax.persistence.TemporalType; 

import org.hibernate.annotations.Type; 

import org.project.model.interfaces.DomainObject; 

@Entity 
public class DbFile implements DomainObject { 

    private static final long serialVersionUID = 1974800702358176016L; 

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

    private String filename; 

    @Column(nullable = false) 
    @Lob 
    @Type(type = "org.hibernate.type.MaterializedClobType") 
    private byte[] content; 

    private String contentType; 

    @Temporal(TemporalType.TIMESTAMP) 
    @Column(updatable = false) 
    private Date created; 

    @PrePersist 
    protected void updateDates() { 
     if (this.created == null) { 
      this.created = new Date(); 
     } 
    } 

    public Long getId() { 
     return id; 
    } 

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

    public String getFilename() { 
     return filename; 
    } 

    public void setFilename(String filename) { 
     this.filename = filename; 
    } 

    public byte[] getContent() { 
     return content; 
    } 

    public void setContent(byte[] content) { 
     this.content = content; 
    } 

    public String getContentType() { 
     return contentType; 
    } 

    public void setContentType(String contentType) { 
     this.contentType = contentType; 
    } 

    public Date getCreated() { 
     return created; 
    } 

    @Override 
    public int hashCode() { 
     final int prime = 31; 
     int result = 1; 
     result = prime * result + ((id == null) ? 0 : id.hashCode()); 
     return result; 
    } 

    @Override 
    public boolean equals(Object obj) { 
     if (this == obj) 
      return true; 
     if (obj == null) 
      return false; 
     if (getClass() != obj.getClass()) 
      return false; 
     DbFile other = (DbFile) obj; 
     if (id == null) { 
      if (other.id != null) 
       return false; 
     } else if (!id.equals(other.id)) 
      return false; 
     return true; 
    } 
} 

टेस्ट:

@Transactional 
@RunWith(SpringJUnit4ClassRunner.class) 
... 
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true) 
public class CvDaoTest extends AbstractTest { 

    @Autowired 
    private CvDao cvDao; 

    @Test 
    public void updateTest() { 
     Cv cv = new Cv(); 
     cv.setName("test"); 

     ... 
     cv.setLastUpdatePerson(lastUpdatePerson); 

     ... 
     cv.setPerson(person); 
     cv.setCreated(new Date()); 
     cv.setLastUpdate(new Date()); 

     cv.setCompany(getCompany()); 
     cv.setLanguage(getLanguage()); 

     ... 
     cv.addSkill(skill1); 
     cv.addSkill(skill2); 

     ... 
     cv.addExperience(experience1); 
     cv.addExperience(experience2); 

     cvDao.save(cv).getId(); 
    } 
} 

GenericDaoJpa.java

public class GenericDaoJpa<T extends DomainObject> implements GenericDao<T> { 

    private Class<T> type; 
// @PersistenceContext 
    protected EntityManager entityManager; 

    @PersistenceContext 
    public void setEntityManager(EntityManager entityManager) { 
     this.entityManager = entityManager; 
    } 

    public GenericDaoJpa(Class<T> type) { 
     super(); 
     this.type = type; 
    } 

    @Transactional(readOnly = true) 
    public T get(Long id) { 
     if (id == null) { 
      return null; 
     } else { 
      return entityManager.find(type, id); 
     } 
    } 

    @SuppressWarnings("unchecked") 
    @Transactional(readOnly = true) 
    public List<T> getAll() { 
     return entityManager.createQuery("select o from " + type.getName() + " o").getResultList(); 
    } 

    @Transactional(readOnly = false) 
    public T save(T object) { 
     if (object.getId() != null) { 
      return entityManager.merge(object); 
     } else { 
      entityManager.persist(object); 
     } 
     entityManager.flush(); 
     return object; 
    } 

    public T delete(T object) { 
     entityManager.remove(object); 
     return object; 
    } 
} 

यह पर विफल रहता है: 'cvDao.save (सीवी) .getId (); '

डेटा स्रोत वर्ग यूआरएल पर ड्राइवर के साथ 'com.mchange.v2.c3p0.ComboPooledDataSource' 'org.hsqldb.jdbcDriver' का उपयोग 'JDBC: HSQLDB: मेम: डेटा'

मैंने क्या गलत किया है?

+0

मुश्किल आप दृढ़ रहना चाहते डेटा देखे बिना कहने के लिए। क्या आप वास्तव में स्कीमा बनाने के लिए हाइबरनेट स्कीमा जनरेशन टूल का उपयोग करते हैं? फिर आप सुनिश्चित करने के लिए कॉलम के आकार को निर्दिष्ट करने के लिए @ लम्बाई का उपयोग कर सकते हैं, सामग्री वास्तव में संबंधित कॉलम में फिट बैठती है। –

+0

@StefanHaberl मैंने टेस्ट और जेनेरिकडाओजेपा.जावा कोड जोड़ा।यह 'cvDao.save (cv)' – Kronis

+0

हम्म पर परीक्षण में अंतिम पंक्ति में विफल रहता है। आप अपने जेनेरिक डीएओ में सेव() विधि को एक त्वरित नज़र के बाद ठीक लगते हैं (हालांकि मुझे समझ में नहीं आता कि आप क्यों मर्ज करना चाहते हैं -) क्या आप अलग-अलग इकाइयों के साथ काम कर रहे हैं जिन्हें आप सत्र में दोबारा जोड़ना चाहते हैं?) फिर से , क्या आपने जांच की है कि स्ट्रिंग लंबाई कॉलम आकार में फिट है? –

उत्तर

1

एचएसक्यूएलडीबी 2.2.9 या नवीनतम सैपशॉट आज़माएं क्योंकि स्टैक ट्रेस 2.2.8 के बाद तय की गई किसी समस्या की तरह दिखता है। दोनों स्नैपशॉट और रिलीज के लिए

Maven भंडार यहाँ है:

http://www.hsqldb.org/repos/org/hsqldb/hsqldb/

इसके अलावा नीचे उत्तर देखें। ऐसा लगता है कि "org.hibernate.type.MaterializedClobType" का उपयोग PostgreSQL के साथ आम है। लेकिन आपका क्षेत्र बाइट [] है और एचएसक्यूएलडीबी के साथ बीएलओबी के रूप में बेहतर प्रतिनिधित्व किया जा सकता है।

Retrieve image from blob via Hibernate (not JDBC)

+0

सहायता नहीं मिली:/ – Kronis

+1

पेटार ताहचीव ने एक बेहतर उत्तर प्रदान किया। एचएसक्यूएल 2.3.2 – Chris

0

मैं एक ही त्रुटि संदेश मिला, जब मेरे रिश्ते की संपत्ति में से एक @ManyToOne एनोटेशन लापता हैं। एचएसक्यूएलडीबी को 2.2.9 तक अपग्रेड करने से समस्या हल नहीं हुई।

"एक रिश्ता न्यूनतम संबंध एनोटेशन या तो @OneToMany या @ManyToMany की आवश्यकता है," आप इस तरह के एनोटेशन जोड़ने के बिना एक नया संपत्ति जोड़ दिया:

जेपीए 2 इस आवश्यकता है?

10

सही जवाब चाहिए: अपने @Column एनोटेशन के लिए लंबाई जोड़ने के लिए, इस तरह:

@Lob 
@Column(length = 10000, name = "style") 
private String style; 
+0

पर मेरे लिए काम किया है आप 2 जी से बड़ी फ़ाइलों को कैसे स्टोर कर सकते हैं? –

4

मैं इसी तरह की समस्या थी। बहुत सारी त्रुटियां थीं: "डेटा अपवाद: स्ट्रिंग डेटा, दाएं छंटनी"। संकल्प बड़े क्षेत्रों के आकार को निर्दिष्ट करना था। उन फ़ील्ड के बिना डिफ़ॉल्ट आकार तक ही सीमित होगा। लेकिन यह बिलकुल भी नहीं है। एचएसक्यूएल स्वचालित रूप से डेटाबेस स्कीमा अपडेट नहीं करता है। तो परिवर्तन डेटाबेस लागू करने के उपयोग पर लागू नहीं होंगे।

@Column(length = 5 * 1024 * 1024) // five megabytes 
private byte[] bytesPreview; 
20

समस्या HSQLDialect कार्यान्वयन, जो एसक्यूएल प्रकार पंजीकृत करता है इसके निर्माता के साथ है:

public HSQLDialect() { 
    super(); 

    ... 
    registerColumnType(Types.BLOB, "blob($l)"); 
    registerColumnType(Types.CLOB, "clob($l)"); 
    ... 
} 

कहाँ $ एलस्तंभ लंबाई विशेषता से लिया जाता है। लेकिन यदि स्तंभ लंबाई विशेषता स्पष्ट रूप से सेट नहीं की गई है तो इसका डिफ़ॉल्ट मान 255 है। इस तरह के मामले HSQLDialect में CLOB (255) जो clobs के लिए अजीब है ...

1)

एक समाधान के लिए पर्याप्त मूल्य के साथ स्पष्ट रूप से स्तंभ लंबाई सेट करने के लिए है के रूप में स्तंभ बनाता है।

उदाहरण के लिए:

@Lob 
@Column(length = 10000) 
private String text; 

लेकिन अगर आप इस तरह के कृत्रिम निर्माणों से बचना चाहते हैं, तो आप बोली बदल सकते हैं।

2)

दूसरा समाधान है HSQLDialect संशोधित करने के लिए:

package com.extensions.dialect; 

import java.sql.Types; 
import org.hibernate.dialect.HSQLDialect; 

public class MyHsqlDialect extends HSQLDialect { 

    public MppHsqlDialect() { 
     super(); 
     registerColumnType(Types.CLOB, "clob"); 
    } 
} 

और हाइबरनेट विन्यास सेटअप नई बोली में:

hibernate.dialect=com.extensions.dialect.MyHsqlDialect 

मैं अपने एकीकरण परीक्षण में इस समाधान का उपयोग करें।


कुछ अतिरिक्त जानकारी यहां पाया जा सकता है:

https://hibernate.atlassian.net/browse/HHH-7541