基本休眠問題。休眠一對多關係與關係上的屬性
我有一個叫做Song
的類和一個叫Artwork
的類,兩者都是獨立存在的。然後一個Song
的實例可以包含多個Artwork
,當他們做的時候,這個關係的屬性是特定的,所以我創建了另一個類,名爲CoverArt
,這兩個類之間的鏈接。我使用註釋來解決冬眠的問題。
如果我在構建數據庫時將所有三個類註釋爲@Entity
,則會收到錯誤>'org.hibernate.MappingException:無法確定類型:圖形,表格:CoverArt,列:[org.hibernate。 mapping.Column(稿)「
如果我改變CoverArt
到@Embeddable
,因爲它只能在Song
我得到的錯誤
的情況下存在」 org.hibernate.annotations.common.AssertionFailure:在繼承狀態層次結構中找不到聲明類:com.jthink.songlayer.CoverArt'
我無法弄清這些信息在說什麼,我有什麼不對。下面是從三類
Song
相關代碼:
@Entity
public class Song
{
@Id
@GeneratedValue
private Integer recNo;
@ElementCollection(fetch=FetchType.EAGER)
@IndexColumn(name = "POSITION")
private List<CoverArt> coverArt;
.....
CoverArt
:
@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;
}
}
Thankyou在Song中添加OneToMany和在Artwork中添加OneToOne已經完成了技巧,我不需要使用JoinColumn。但是,爲什麼CoverArt必須是一個只存在於歌曲背景下的實體,是因爲它是鏈接到一個實體? – 2012-02-07 15:34:28
您可以將其設爲嵌入式對象,但這隻會使其變得更加困難,並且您無法像使用實體一樣查詢它們。當一些東西必須映射到它自己的表格時,我通常更喜歡使用一個實體。 – 2012-02-07 17:20:19
並讓我的代碼使用這個工作我需要做@OneToMany(fetch = FetchType.EAGER)希望不會隱藏我的代碼中的問題。 – 2012-02-07 17:31:56