Java @OneToMany未知目标实体属性,子实体中有多个@ManyTone

Java @OneToMany未知目标实体属性,子实体中有多个@ManyTone,java,hibernate,jpa,Java,Hibernate,Jpa,我在Hibernate中有一个错误: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: ch.zkb.documenz.backend.model.Template.user in ch.zkb.documenz.backend.model.User.templates 我有两个表:User和Template,但在Template中,我需要使用createdBy、

我在Hibernate中有一个错误:

org.hibernate.AnnotationException: mappedBy reference 
an unknown target entity property: ch.zkb.documenz.backend.model.Template.user 
in ch.zkb.documenz.backend.model.User.templates
我有两个表:User和Template,但在Template中,我需要使用createdBy、lockBy或lastUpdateBy中的用户id,我想我必须像我的示例中那样使用@onetomany,但它不正确,那么最好的做法是什么

public class User implements Serializable {

@Id
@Column(name = "user_id", unique = true, nullable = false)
private Long id;

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "user")
private Set<Template> templates;


public class Template implements Serializable {

@Id
@Column(name = "template_id", unique = true, nullable = false)
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "createdBy")
private User createdBy;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "lastUpdateBy")
private User lastUpdateBy;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "lockBy")
private User lockBy;
公共类用户实现可序列化{
@身份证
@列(name=“user\u id”,unique=true,nullable=false)
私人长id;
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL,mappedBy=“user”)
私有集模板;
公共类模板实现可序列化{
@身份证
@列(name=“template\u id”,unique=true,nullable=false)
私人长id;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“createdBy”)
由用户创建的私有用户;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“lastUpdateBy”)
私人用户lastUpdateBy;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“lockBy”)
私人用户锁定;
编辑,我现在有一个双向延迟加载问题,我想让用户创建模板,但我不能..始终为空,但在数据库中正确存储

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "createdBy")
    private Set<Template> createdTemplates;

@ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "createdBy", referencedColumnName = "user_id", nullable = false)
    private User createdBy;
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL,mappedBy=“createdBy”)
私有集合createdTemplates;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“createdBy”,referencedColumnName=“user\u id”,nullable=false)
由用户创建的私有用户;

您可以分别映射到您的私钥,然后使用临时方法合并它们

private Set<Template> templates = new HasSet<Template>();

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "createdBy")
private Set<Template> createdByTemplates;

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "lastUpdateBy")
private Set<Template> lastUpdateByTemplates;

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "lockBy")
private Set<Template> lockByTemplates;

@Transient
public Set<Template> getTemplates(){
   if(getCreatedByTemplates() != null){
     templates.addAll(getCreatedByTemplates());
   }

   if(getLockByTemplates() != null){
     templates.addAll(getLockByTemplates());
   }

   if(getLastUpdateByTemplates() != null){
     templates.addAll(getLastUpdateByTemplates());
   }

   return templates;
}
private Set templates=new HasSet();
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL,mappedBy=“createdBy”)
私有集createdByTemplates;
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL,mappedBy=“lastUpdateBy”)
私有集lastUpdateByTemplates;
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL,mappedBy=“lockBy”)
私有设置锁定模板;
@短暂的
公共集getTemplates(){
if(getCreatedByTemplates()!=null){
addAll(getCreatedByTemplates());
}
if(getLockByTemplates()!=null){
addAll(getLockByTemplates());
}
如果(getLastUpdateByTemplates()!=null){
addAll(getLastUpdateByTemplates());
}
返回模板;
}

异常消息清楚地说明了什么不起作用,mappedBy必须引用您在其他实体中拥有的属性名称,
在模板实体中没有名为“user”的属性,请尝试删除mappedBy。

我相信mappedBy正在模板中查找bean名称“user”

public class User implements Serializable {
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "user")
private Set<Template> templates;


public class Template implements Serializable {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
公共类用户实现可序列化{
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL,mappedBy=“user”)
私有集模板;
公共类模板实现可序列化{
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“user\u id”)
私人用户;

Change is variable namecreatedby to user in Template Class会有帮助的

谢谢你的帮助,我确实像你告诉我的那样,但是现在我有一个延迟加载的问题,当我想让用户createdby时,总是空的,问题在哪里?你是在获取“用户”父级还是“模板”Child?sgpalit,现在我不能在惰性模式下加载由模板实体创建的,你可以在主问题中看到代码,在编辑部分,我没有异常或错误..谢谢winmiden,你是对的,但现在我有一个惰性加载的问题,在我的帖子中你可以看到我的新映射,你知道这是问题,我没有错误,只有User实体为空