我正在尝试将下表映射到JPA中。user_tax和税收以及user_tax和用户之间的关系是一对多的。它使我感到困惑,因为我有一个复合主键,我需要将外键映射到这2个键。
错误消息:< code > org . hibernate . annotation exception:mapped by引用未知的目标实体属性:entity。实体中的Tax.user_tax。UserTax.taxs
tax user_tax user
-------- -------- ------
PK|t_id |--------| t_id |PK-FK |u_name|
|t_name| PK-FK| u_id |-------|u_id | PK
| | | name | | |
这是我的实体:
@Entity
@Table(name = "user")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name="u_name")
private String uname;
getters + setters
}
@Entity
@Table(name = "tax")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Tax implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "t_name")
private String tname;
@Embeddable
public class UserTaxId implements Serializable {
@Column(name="u_id")
private Long uId;
@Column(name="t_id")
private Long tId;
@Entity
@Table(name = "user_tax")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class UserTax implements Serializable {
@EmbeddedId
private UserTaxId userTaxId;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user_tax")
private List<User> users;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user_tax")
private List<Tax> taxs;
我将在这里发布经过3天研究后对我有效的信息。
布赖恩·沃斯伯格正确地发布了用户税务类:
@Entity
@Table(name = "user_tax")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class UserTax implements Serializable {
@EmbeddedId
private UserTaxId userTaxId;
@ManyToOne(fetch = FetchType.LAZY)
@MapsId("uId") // maps uId attribute of embedded id
private User user;
@ManyToOne(fetch = FetchType.LAZY)
@MapsId("tId") // maps tId attribute of embedded id
private Tax tax;
...
}
然而,我得到了错误消息,我的代码没有编译。然后我还必须编辑用户和税务类:
@Entity
@Table(name = "user")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(
mappedBy = "tid",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<UserTax> tax = new ArrayList<>();
@Column(name="u_name")
private String uname;
getters + setters
}
@Entity
@Table(name = "tax")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Tax implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(
mappedBy = "uid",
cascade = CascadeType.ALL,
orphanRemoval = true
)
private List<UserTax> taxs = new ArrayList<>();
@Column(name = "t_name")
private String tname;
setters+getters
}
以下是我找到问题解决方案的链接:https://vlamihalcea . com/the-best-way-to-map-a-many-to-many-association-with-extra-columns-when-using-JPA-and-hibernate/
您的1: n映射是向后的(即UserTax
只能有一个User
和一个Tax
)并且您正在使用派生标识。尝试像这样映射UserTax
:
@Entity
@Table(name = "user_tax")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class UserTax implements Serializable {
@EmbeddedId
private UserTaxId userTaxId;
@ManyToOne(fetch = FetchType.LAZY)
@MapsId("uId") // maps uId attribute of embedded id
private User user;
@ManyToOne(fetch = FetchType.LAZY)
@MapsId("tId") // maps tId attribute of embedded id
private Tax tax;
...
}
派生标识在第2.4.1节的JPA 2.2规范中进行了讨论(带有示例)。
我用复合键定义了两个实体之间的多对多关系。问题是,当我获得join对象时,它只被过滤了关系的一侧,而不是两边。 图片使问题更加清晰。这里,我要查找的是dtid=185和prid=352,但我从多对多关系中得到的是两个突出显示的行。 天丁:
问题内容: 我想在两个实体(消费者和政策)之间建立一对多关系。一个消费者应该有几项政策。 这是我希望拥有的Consumer JSON对象的示例: 这是我到目前为止所拥有的: 政策实体 消费者实体 我认为这并不难,但是我现在尝试了几个小时而无法完成。我是Spring的新手,所以如果有人能够帮助我,我将非常感激! 问题答案: @Entity public class Consumer { 不是必需的,
问题内容: 也许这是一个愚蠢的问题,但这困扰了我。 我有一个从员工到车辆的双向一对多关系。当我第一次将Employee保留在数据库中时(即它没有分配的ID),我也希望保留其关联的Vehicles。 目前,这对我来说很好,除了我保存的Vehicle实体没有自动映射关联的Employee,并且在数据库中Vehicle表中的employee_id外键列为空。 我的问题是,是否可以在雇员本身被保留的同时保
我希望在消费者和政策这两个实体之间建立一对多关系。一个消费者应该有几个政策。 这是我想要的一个消费JSON对象的例子: 这就是我到目前为止所做的: 政策实体 消费者实体 我想没那么难,但我已经试了几个小时了,还是做不到。我刚到Spring,所以如果有人能帮助我,我会非常感激!
我正在尝试使用Hibernate/Jpa建立一对多关系。 当前我遇到以下异常: 退款交易。java这是父类 ItemRefundDetail.java这是子类。 我知道我在@OneToMany或@manytone注释中犯了一些错误。 更新:我在db、refund_transaction和item_refund_detail中只有2个表。我没有任何名为refund_transaction_item_