小编aka*_*ihi的帖子

同时使用Hibernate和Spring数据jpa?

是否可以使用Spring Data JPA(由Hibernate作为JPA提供程序支持)并同时直接使用Hibernate?

问题是,当我使用JpaTransactionManager时,我无法检索当前会话org.hibernate.HibernateException: No Session found for current thread.当我切换到HibernateTransaction管理器时,JPA存储库无法提交更改.

这是我的Spring上下文的一部分(使用该上下文我不能使用直接的Hibernate调用):

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/IPGCONF"/>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
      p:dataSource-ref="dataSource">
    <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="entityManagerFactory"/>
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
    <property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>

<jpa:repositories base-package="com.satgate"/>
Run Code Online (Sandbox Code Playgroud)

hibernate存储库的示例:

public Collection<Layer> listCurrent(Carrier carrier) {
    Criteria query = sessionFactory.getCurrentSession()
                    .createCriteria(Layer.class)
                    .add(Restrictions.eq("carrier", carrier));
    query.createCriteria("bitrate")
            .addOrder(Order.desc("bitrate"))
            .add(Restrictions.eq("symbolrate", carrier.getSymbolrate()));
    return query.list();
}
Run Code Online (Sandbox Code Playgroud)

Spring数据存储库定义的示例:

public interface BitrateRepository extends PagingAndSortingRepository<Bitrate, Long> …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jpa spring-data

32
推荐指数
2
解决办法
2万
查看次数

嵌套名称说明符

我有一个代码:

namespace mymap {
    template <class Key,template <typename T > class Allocator> myownmap {
        typedef pair<const unsigned int, Key> typename _myPair;
        typedef multimap<unsigned int, Key,less<Key> ,Allocator<_myPair> > typename _entriesType;
    }
}
Run Code Online (Sandbox Code Playgroud)

它在MSVC下成功编译(和工作),但是gcc抱怨语法无效:

.hpp:20: error: expected nested-name-specifier before ‘_myPair’
.hpp:20: error: two or more data types in declaration of ‘_myPair’
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

c++ templates generic-programming

17
推荐指数
3
解决办法
4万
查看次数

将部分专用模板作为模板参数传递

我有一个类模板,期望一些其他模板作为参数:

template<
    class Key, 
    template <typename K,template <typename T> class Allocator> class Policy
>
class container {
     Policy<Key,Allocator>* _policy;
     //some code here
};
Run Code Online (Sandbox Code Playgroud)

通常我将它与策略类一起使用,如下所示:

template <class Key,template <typename T> class Allocator> class policy {
    //some code
};
Run Code Online (Sandbox Code Playgroud)

但是如果我必须将额外的模板参数传递给策略类呢?就像是:

template <time_t Age,class Key,template <typename T> class Allocator> class policy_3 {
    //some code
};
Run Code Online (Sandbox Code Playgroud)

我该怎么办,允许该类用户通过Age paratemeter而不接触其他人?例如:

typedef container<key_type,policy_3<100500> > containerWithAge;
Run Code Online (Sandbox Code Playgroud)

c++ templates metaprogramming

4
推荐指数
1
解决办法
1084
查看次数