0

Hibernate を使用して db スキームを作成しています。「tbl_articles」と呼ばれるテーブルと「tbl_categories」と呼ばれる別のテーブルがあります。nn 関係を持つには、ヘルパー テーブル ("tbl_articles_categories") が必要です。

必要なすべてのエンティティは次のとおりです。

@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;

    // other fields...

    public Integer getId()
    {
        return id;
    }

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

    // other fields...
}

@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;

    // other fields

    public Integer getId()
    {
        return id;
    }

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

    // other fields...
}

@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
{
    private ArticleCategoryPK pk = new ArticleCategoryPK();

    public void setPk( ArticleCategoryPK pk )
    {
        this.pk = pk;
    }

    @EmbeddedId
    public ArticleCategoryPK getPk()
    {
        return 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 );
    }
}

@Embeddable
public class ArticleCategoryPK implements Serializable
{
    private static final long serialVersionUID = 1L;

    @ManyToOne
    @ForeignKey( name = "tbl_articles_categories_fkey_article_id" )
    private Article article;

    @ManyToOne
    @ForeignKey( name = "tbl_articles_categories_fkey_category_id" )
    private Category category;

    public ArticleCategoryPK( Article article, Category category )
    {
        setArticle( article );
        setCategory( category );
    }

    public ArticleCategoryPK()
    {
    }

    public Article getArticle()
    {
        return article;
    }

    public void setArticle( Article article )
    {
        this.article = article;
    }

    public Category getCategory()
    {
        return category;
    }

    public void setCategory( Category category )
    {
        this.category = category;
    }
}

これで、記事テーブルとカテゴリ テーブルで必要なシリアル タイプを取得できました。しかし、私のヘルパー テーブルを調べると、予想されるフィールド article_id と category_id のそれぞれが整数型ではありません。代わりに、bytea 型の article と category があります。

ここで何が問題なのですか?

編集:申し訳ありませんが、PostgreSQL を使用していることを忘れていました。

4

1 に答える 1

0

@JoinColumnに追加することArticleCategoryPK.articleでこれを解決しましたArticleCategoryPK.category

于 2012-06-30T15:12:11.357 に答える