Основной вопрос Hibernate.
У меня есть класс с именем Song
и класс с именем Artwork
, оба существуют независимо.Тогда экземпляр Song
может содержать несколько Artwork
с, и когда они это делают, существуют атрибуты, специфичные для этого отношения, поэтому я создал другой класс с именем CoverArt
, который связывает эти два.Я использую аннотации для спящего материала и у меня возникают проблемы.
Если при создании базы данных я аннотирую все три класса как @Entity
, я получаю ошибку> 'org.hibernate.MappingException: Не удается определить типfor: Artwork, в таблице: CoverArt, для столбцов: [org.hibernate.mapping.Column (artwork)] '
Если я изменю CoverArt
на @Embeddable
, так как он существует только в контекстеa 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;
}
}