错误:由: com.xxx.data.dao.classes.Categories.categoriesLang,引用的属性(未知: com.xxx.data.dao.classes.superclasses.CategoriesLang.categories )中的: org.hibernate.AnnotationException:未知mappedBy引起的
我的设置:
Hibernate 3.5.6
public interface CategoriesLangInt {
int id_categories = 0;
Categories categories = null;
String name = "";
String description = "";
int getId_categories();
void setId_categories(int id_categories);
Categories getCategories();
void setCategories(Categories categories);
String getName();
void setName(String name);
String getDescription();
void setDescription(String description);
}@MappedSuperclass
public abstract class CategoriesLang implements CategoriesLangInt {
@Id
@Column(name = "id_categories")
private int id_categories = 0;
@OneToOne
@JoinColumn(name = "id_categories")
private Categories categories;
@Size(max = 50)
private String name = "";
@Size(max = 350)
private String description = "";
@Override
public int getId_categories() {
return id_categories;
}
@Override
public void setId_categories(int id_categories) {
this.id_categories = id_categories;
}
@Override
public Categories getCategories() {
return categories;
}
@Override
public void setCategories(Categories categories) {
this.categories = categories;
}
@Override
public String getName() {
return name;
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public String getDescription() {
return description;
}
@Override
public void setDescription(String description) {
this.description = description;
}
}@Entity
@Table(name="categories")
public class Categories implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id_categories;
private boolean active;
@OneToOne(mappedBy="categories")
private CategoriesLangInt categoriesLangInt;
public Integer getId_categories() {
return id_categories;
}
public void setId_categories(Integer id_categories) {
this.id_categories = id_categories;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
public CategoriesLangInt getCategoriesLangInt() {
return categoriesLangInt;
}
public void setCategoriesLangInt(CategoriesLangInt categoriesLangInt) {
this.categoriesLangInt = categoriesLangInt;
}
}更新解决了它!
经过很长一段时间的研究,我终于成功了。很好用!

@Entity
@Table(name="categories")
public class Category implements Serializable {
private Integer id;
private boolean active;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
}public interface CategoryInt{
int getCategory_id();
void setCategory_id(int category_id);
String getName();
void setName(String name);
String getDescription();
void setDescription(String description);
void setCategory(Category category);
Category getCategory();
}@MappedSuperclass
public abstract class CategoryLang implements CategoryInt{
private int category_id;
private String name;
private String description;
private Category category;
@Override
@Id
public int getCategory_id() {
return category_id;
}
@Override
public void setCategory_id(int category_id) {
this.category_id = category_id;
}
@Override
@Size(max = 50)
public String getName() {
return name;
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
@Size(max = 350)
public String getDescription() {
return description;
}
@Override
public void setDescription(String description) {
this.description = description;
}
@Override
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
public Category getCategory() {
return category;
}
@Override
public void setCategory(Category category) {
this.category = category;
}
}@Entity
@Table(name = "en_categories")
public class CategoryEN extends CategoryLang implements Serializable {}@Entity
@Table(name = "es_categories")
public class CategoryES extends CategoryLang implements Serializable {}发布于 2012-02-27 13:44:29
首先,接口不能定义字段,而只能定义方法。您在接口中声明的字段实际上是公共静态最终常量。
之后,类别实体有一个CategoriesLangInt字段,但是Hibernate无法知道这个字段代表哪个实体,因为可能有几个实体实现了这个接口。您必须使用targetEntity注释的OneToOne属性来告诉Hibernate引用了哪个实体。
最后,id_categories列在CategoriesLang中被映射两次:一次作为ID,一次作为JoinColumn。您必须删除id_categories字段并用@Id对categories字段进行注释,或者保留id_categories字段原样,并将@MapsId注释添加到categories中。
附带注意:您应该尊重Java命名约定(字段和方法中没有下划线),并将类别重命名为类别,将CategoriesLang重命名为CategoryLang,等等。
https://stackoverflow.com/questions/9465773
复制相似问题