当前位置: 首页 > 知识库问答 >
问题:

Hibernate:为复合PK,FK指定mappedBy属性的正确值

庄阿苏
2023-03-14
@Embeddable
public class UserID  implements Serializable {

    private static final long serialVersionUID = 1L;
    private int ssnID;
    private int uniqueNum;
    // getters and setters..
}
@Embeddable
public class VehicleID implements Serializable {
    private int vehicleID;
    private int regNum;
    // getters and setters
}
@Entity
public class Vehicle {

    @EmbeddedId
    private VehicleID vehicleID;
    private String description;
    // getters and setters..
}
@Entity
public class UserInfo {
    private String full_name;
    @EmbeddedId
    UserID userID;

    @OneToOne(cascade=CascadeType.ALL)
    @JoinColumns({@JoinColumn(name="vehicle_ID") , @JoinColumn(name="reg_Num")}) // Composite primary key in Vehicle
    Vehicle veh;
    // getters, setters and other code
}
@OneToOne(cascade=CascadeType.ALL)
@JoinColumns({@JoinColumn(name="vehicle_ID") , @JoinColumn(name="reg_Num")})
Vehicle veh;

现在,当我想使它成为双向关系时,我们需要使用mappedby属性,这是我无法理解引用什么属性的地方。

@Ent/ity
public class Vehicle {
    @EmbeddedId
    private VehicleID vehicleID;
    private String description;

    @OneToOne(mappedBy="UserID")
    private UserInfo userInfo;

    // getters and setters..
}

我保留了“userid”作为UserInfo的“复合”主键,但它引发了异常

线程“main”org.hibernate.annotationexception:在:com.example.entity.vehicle.UserInfo中未知的mappedBy,引用的属性未知:com.example.entity.userinfo.userid

有人能帮我弄明白这一点吗?

共有1个答案

姬庆
2023-03-14

应该是这样的:

@OneToOne(mappedBy="veh")
private UserInfo userInfo;

mappedby元素标识关系的反面。这里有Vehicle和UserInfo之间的关系,所以要识别关系的反面,应该使用它的另一面属性。这里veh

有关更多信息,请参见

 类似资料:
  • 假设我有这些表: 表A在两个字段上有一个复合主键: 员工ID(字符串) 表B也有一个复合主键,但在三个字段上: 员工ID(字符串) 交易ID(Long) 日期(Date) 在表B中,员工ID和事务ID上有一个外键,称为“FK1”(为简单起见)。 由于表A中使用的复合id用于多个映射的Hibernate类,因此我创建了一个可以重用的类: 因此,映射到表A的类如下所示: 映射到表B的类如下所示: 显然

  • 我是一个JPA新手,正在尝试理解@Jointable annotation用于双向、单管关系、B/W项目和任务实体,其中项目可以有多个任务。 我可以将@Jointable与具有@ManyToOne注释的实体一起使用,但当我将@JoinColumn放置在具有@OneToMany的另一个实体上时,我没有在@ManyToOne注释上指定“MappedBy”属性的选项。 我想知道为什么? 我尝试在这两个实

  • 我有实体类用户通过@IdClass注释使用复合键 复合键: 我将Spring数据与hibernate JPA一起使用。因此,我有回购接口: 我想通过具体姓名和姓氏列表从数据库中获取所有活跃用户。例如。我想使用这样的方法 如何通过Spring数据或JPQL查询此需求?

  • 问题内容: 我有两个经审计的实体A和B。实体A拥有实体B的集合(注释为一对多关系)。将A的新实例插入数据库时​​,A和B的所有行都处于同一修订版(假设修订版1)。然后,对A进行了更新,仅影响实体B的实例。因此,更新后,实体A仍处于修订版1,而实体B处于修订版2(包括审核表中的MOD条目) 。在修订版3中,实体A被删除。因为实体B的集合用@Cascade注释,所以属于A的实体B也被删除。 在这种情况

  • 问题内容: 据我了解,每当我在JPA / Hibernate实体内的Long字段上使用@Id和@GeneratedValue时,我实际上是在使用代理键,考虑到我的非母语,这是定义主键的一种非常不错的方法- 使用复合主键的良好经验,其中: 有不止一种业务-价值-行业组合成为唯一的PK 组合pk值在表详细信息中重复 无法更改该复合PK内的业务价值 我知道休眠可以支持两种类型的PK,但是我以前与有经验的

  • 首先,我的课程: 使用者 角色地图。JAVA 当我尝试在服务器上运行这个我有这样的异常:错误创建bean与名称'SessionFactory'定义在ServletContext资源[/WEB-INF/类/base Beans.xml]:调用init方法失败;嵌套的异常org.hibernate.注释异常:映射通过引用一个未知的目标实体属性:com.patpuc.model.ap.users在com