我做了类似的事情,您也需要将通用类也用作构造函数参数,我的也使用休眠实体,但是您可以传入表名的字符串。
public class DomainRepository<T> { @Resource(name = "sessionFactory") protected SessionFactory sessionFactory; public DomainRepository(Class genericType) { this.genericType = genericType; } @Transactional(readonly = true) public T get(final long id) { return (T) sessionFactory.getCurrentSession().get(genericType, id); }
然后,您可以子类化(如果需要)以自定义或简单地在spring配置中设置bean,如t所示:
<bean id="tagRepository" > <constructor-arg value="com.yourcompnay.domain.Tag"/></bean>
因此,在您的代码中,您可以像这样引用tagRepository(除了上面和下面发布的代码之外,不需要其他编码):
@Resource(name = "tagRepository")private DomainRepository<Tag> tagRepository;
另外,我将其称为存储库而不是服务,服务处理不同的类型及其交互(而不仅仅是一个)。特别是使用SQL字符串的示例:
public final String tableName;public DomainRepository(String tableName) { this.tableName = tableName;}public List<T> getAll(Integer status) { Session session = sessionFactory.getCurrentSession(); Query query = session.createQuery("FROM " + tableName + " WHERe status = " + status); return query.list();}
并像这样定义您的豆子
<bean id="addressRepository" > <constructor-arg value="address"/></bean>
然后,您还可以根据需要自己创建子类:
public class PersonRepository extends DomainRepository<Person> { public PersonRepository(){ super("person"); //assumes table name is person }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)