Ошибка POSTGRESQL при работе с Spring MVC / Hibernate «Большие объекты нельзя использовать в режиме автоматической фиксации» - PullRequest
0 голосов
/ 10 октября 2011

Конечно, это кажется достаточно простым для Здесь , но я добавил следующее в контекст своего приложения ...

<property name="dataSource">
    <ref bean="dataSource"/>
</property>

<property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.autocommit">false</prop>
        </props>
    </property>
    <property name="annotatedClasses">
        <list>
            <value>com.gleason.gt.server.model.database.PlayListEntry</value>
            <value>com.gleason.gt.server.model.database.MusicFile</value>
        </list>
    </property>
</bean>

Я все еще получаю ту же ошибку, есть идеи?

UPDATE Добавление сервиса / DAO

@Repository("musicFileDao")
public class MusicFileDAOImpl extends GroovyTimeHibernateDAOSupport{
@Transactional()
public MusicFile getMusicFile(Integer i){
    @SuppressWarnings("unchecked")
    List<MusicFile> returnValue = (List<MusicFile>)getHibernateTemplate().find("from MusicFile where id=?",i);
    if(returnValue.size()>0){
        return returnValue.get(0);
    }
    return null;
}
}
@Service("musicFileService")
public class MusicFileService {
@Autowired
private MusicFileDAOImpl dao;

@Transactional
public MusicFile getMusicFile(Integer i){
    return dao.getMusicFile(i);
}
}

@Lob
@Column(name="file")
private byte[] file;

1 Ответ

2 голосов
/ 22 марта 2013

Суть в том, что большой объект - это его собственная вещь, совершенно отличная от байты. Если вы ищете байтовый массив, используйте вместо него bytea.

Большой объект - это независимый объект базы данных, который сохраняется с использованием другого интерфейса, а затем на него ссылаются с использованием идентификатора объекта. Это требует двух операторов SQL и, следовательно, это небезопасно в режиме автоматической фиксации. Большие объекты предпочтительнее для очень больших полей по двум причинам:

  1. В большом объекте вы можете хранить вдвое больше, чем в байтах, и

  2. Большие объекты поставляются с потоковым интерфейсом, позволяющим осуществлять поиск по смещению и тому подобное. Они работают больше как файлы, чем как атрибуты базы данных.

Большие объекты действительно полезны в нужных местах, но они несколько необычны. Скорее всего, вы хотите байт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...