gpt4 book ai didi

java - Hibernate:复合 id 服务

转载 作者:行者123 更新时间:2023-12-01 15:16:01 25 4
gpt4 key购买 nike

我的实体:文章、类别。这是一种 n:m 关系。我想获取特定类别引用的文章数量。

这是我的实体:

@Entity
@Table( name = "tbl_articles" )
public class Article implements Serializable
{
private static final long serialVersionUID = 1L;

@Id
@Column( nullable = false )
@GeneratedValue( strategy = GenerationType.IDENTITY )
private Integer id;

@Column( nullable = false )
private String title;

@Column( nullable = false )
private Date creationDate = new Date();

@Lob
@Type( type = "org.hibernate.type.StringClobType" )
@Column( nullable = false )
private String text;

// Getter + setter
}

@Entity
@Table( name = "tbl_categories" )
public class Category implements Serializable
{
private static final long serialVersionUID = 1L;

@Id
@Column( nullable = false )
@GeneratedValue( strategy = GenerationType.IDENTITY )
private Integer id;

@Column( nullable = false )
private String title;

// Getter + setter
}

@Entity
@Table( name = "tbl_articles_categories" )
@AssociationOverrides({
@AssociationOverride( name = "pk.article", joinColumns = @JoinColumn( name = "article_id" ) ),
@AssociationOverride( name = "pk.category", joinColumns = @JoinColumn( name = "category_id" ) )
})
public class ArticleCategory
{
@EmbeddedId
private ArticleCategoryPK pk = new ArticleCategoryPK();

public ArticleCategoryPK getPk() ...

public void setPk( ArticleCategoryPK pk ) ...

@Transient
public Article getArticle()
{
return pk.getArticle();
}

public void setArticle( Article article )
{
pk.setArticle( article );
}

@Transient
public Category getCategory()
{
return pk.getCategory();
}

public void setCategory( Category category )
{
pk.setCategory( category );
}
}

现在我有了文章和类别的存储库和服务层。我只会提供文章层来显示结构。

public abstract class BaseDAO<E>
{
public abstract List<E> list( int offset, int limit );
public abstract void delete( int id );
public abstract void save( E entity );
public abstract E get( int id );
public abstract List<E> list();
public abstract Integer size();
}

@Repository
public class ArticleDAO extends BaseDAO<Article>
{
@Autowired
private SessionFactory sessionFactory;

@Override
public void delete( int id )
{
Article article = get( id );

if ( article != null )
{
sessionFactory.getCurrentSession().delete( article );
}
}

@Override
public void save( Article article )
{
sessionFactory.getCurrentSession().save( article );
}

@Override
public Article get( int id )
{
return ( Article ) sessionFactory.getCurrentSession().load( Article.class, id );
}

@SuppressWarnings( "unchecked" ) // The type is determined by the HQL query but the interface returns an untyped list
@Override
public List<Article> list()
{
return sessionFactory.getCurrentSession().createQuery( "from Article" ).list();
}

@Override
public Integer size()
{
Number ret = ( Number ) criteria.setProjection( Projections.rowCount() ).uniqueResult();
return ret.intValue();
}
}

public abstract class BaseService<E, D extends BaseDAO<E>>
{
protected D dao;

public BaseService()
{
}

protected D getDao()
{
return dao;
}

@Autowired
protected void setDAO( D dao )
{
this.dao = dao;
}

@Transactional
public void delete( int id )
{
dao.delete( id );
}

@Transactional
public void save( E entity )
{
dao.save( entity );
}

@Transactional
public E get( int id )
{
return dao.get( id );
}

@Transactional
public List<E> list()
{
return dao.list();
}

@Transactional
public Integer size()
{
return dao.size();
}
}

@Service
public class ArticleService extends BaseService<Article, ArticleDAO>
{
public ArticleService()
{
setDAO( dao );
}
}

如何根据类别获取文章的大小?我是否需要为 ArticleCategory 创建另一个存储库/服务层对?它应该是什么样子,因为我得到:

No matching bean of type [com.example.model.ArticleCategoryDAO] found for
dependency: expected at least 1 bean which qualifies as autowire candidate for
this dependency. Dependency annotations: {}

最佳答案

你的异常与你的问题和Hibernate无关,结束与Spring有关的一切。 Spring 找不到任何 ArticleCategoryDAO 类型的 Spring bean。您可能忘记用 @Repository 对其进行注释。

顺便说一句,您询问是否应该为 ArticleCategory 创建一个 DAO,但错误消息显示您已经创建了一个。

附带问题:为什么不在 Article 和 Category 之间简单地创建一个 ManyToMany 关联?根本不需要 ArticleCategory 实体。

关于java - Hibernate:复合 id 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11600324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com