Я получаю эту ошибку, когда буду persist() мое лицо. Я думаю, что причиной ошибки является отношение, моя идея заключается в том, что FolderEntity (представляет собой виртуальную папку) может оставаться внутри другого (только один). Затем я создал ссылку на self (в расширенном классе, поскольку все ресурсы могут быть внутри папки, и папка является ресурс)JPA Entity field reference OneToOne recursive
org.hibernate.AnnotationException: Referenced property not a (One|Many)ToOne: com.editor.entity.FolderEntity.id in mappedBy of com.editor.entity.FolderEntity.folderId
Это мой главный Entity
:
@MappedSuperclass
public abstract class Entity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID", nullable = false)
private Integer id;
/** getter/setter **/
}
Тогда я расширяю его в моем ResourceEntity Entity:
@MappedSuperclass
public class ResourceEntity extends Entity {
@Column(name = "NAME", length = Lengths.NAME40, unique = true, nullable = false)
private String name;
@Column(name = "DESCRIPTION", length = Lengths.DESCRIPTION1000, unique = false, nullable = true)
private String description;
@JoinColumn(name = "FOLDER_ID", updatable = true, nullable = false)
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "id")
private FolderEntity folderId;
/** getter/setter **/
}
Наконец, я работаю с этой организацией:
@javax.persistence.Entity
@Table(name = "EDITOR_FOLDERS")
@NamedQueries({
@NamedQuery(name = FolderEntity.ALL_FOLDERS, query = "select f from FolderEntity f"),
@NamedQuery(name = FolderEntity.FOLDER_BY_NAME, query = "select f from FolderEntity f where name = :name and resourceType = :resourceType") })
public class FolderEntity extends ResourceEntity {
public static final String ALL_FOLDERS = "findAllFolders";
public static final String FOLDER_BY_NAME = "findAllFoldersByName";
@Column(name = "RESOURCE_TYPE", length = Lengths.CODE, unique = false, nullable = false)
private Integer resourceType;
/** getter/setter **/
}
Anybodys помочь мне решить эту проблему? Благодаря!
У вас нет ассоциации @ @ OneToOne здесь, но '@ ManyToOne'. В конце концов, ** много ** ресурсов могут находиться внутри ** одной папки **. – manish