基本的な休止状態の質問。関係の属性とHibernate 1対多の関係
私はSong
というクラスとArtwork
というクラスを持っていますが、どちらも独立して存在します。 Song
のインスタンスには複数のが含まれていて、それらの属性がその関係に特有のものであるため、CoverArt
という2つのクラスをリンクする別のクラスを作成しました。私は休止状態のものと問題があるために注釈を使用しています。
データベースを構築するときに、3つのクラスすべてに@Entity
と注釈を付けると、エラーが発生します。> 'org.hibernate.MappingException:型の判別ができません:アートワーク、テーブル:CoverArt、列:[org.hibernate。 mapping.Column(アートワーク)] org.hibernate.annotations.common.AssertionFailure「
それだけSong
の文脈に存在するように私は、@Embeddable
へCoverArt
を変更すると、私はエラー
を取得します」宣言クラスが継承状態階層に見つかりません:com.jthink.songlayer.CoverArt '
私はこれらのメッセージが何を言っているのか、私は間違っているのか分かりません。
@Entity
public class Song
{
@Id
@GeneratedValue
private Integer recNo;
@ElementCollection(fetch=FetchType.EAGER)
@IndexColumn(name = "POSITION")
private List<CoverArt> coverArt;
.....
CoverArt
:ここでは三つのクラス
Song
から関連するコードがある
@Embeddable
public class CoverArt
{
private String imageType;
private String description;
private Artwork artwork;
@Id
@GeneratedValue
private Integer id;
public CoverArt()
{
}
public String getImageType()
{
return imageType;
}
public void setImageType(String imageType)
{
this.imageType = imageType;
}
public String getDescription()
{
return description;
}
public void setDescription(String description)
{
this.description = description;
}
public Artwork getArtwork()
{
return artwork;
}
public void setArtwork(Artwork artwork)
{
this.artwork = artwork;
}
}
Artwork
:
@Entity
public class Artwork
{
public Artwork()
{
}
public Artwork(byte[] imageData)
{
this.imageData=imageData;
}
@Id
@GeneratedValue
private Integer id;
@Lob
private byte[] imageData;
private String mimeType;
private int width;
private int height;
public byte[] getImageData()
{
return imageData;
}
public void setImageData(byte[] imageData)
{
this.imageData = imageData;
}
public String getMimeType()
{
return mimeType;
}
public void setMimeType(String mimeType)
{
this.mimeType = mimeType;
}
public int getWidth()
{
return width;
}
public void setWidth(int width)
{
this.width = width;
}
public int getHeight()
{
return height;
}
public void setHeight(int height)
{
this.height = height;
}
}
SongのOneToManyとアートワークのOneToOneを追加していただきありがとうございます。私はJoinColumnを使用する必要はありませんでした。しかし、CoverArtはなぜそれが歌の文脈にのみ存在するentiyでなければならないのですか?それはエンティティにリンクしているからですか? –
これを埋め込みオブジェクトにすることはできますが、難しくなるだけで、エンティティと同様にクエリを実行することはできません。私は通常、何かを独自のテーブルにマップする必要があるときにエンティティを使用する方が好きです。 –
これを使用して私のコードを取得するには、@OneToMany(fetch = FetchType.EAGER)のコードで問題が隠れていないことが必要でした。 –