Java 休眠在@JoinTable上创建关系
我有两个具有多对多关系的表,它们具有可连接的用户服务,如下所示Java 休眠在@JoinTable上创建关系,java,hibernate,jakarta-ee,jpa,hibernate-mapping,Java,Hibernate,Jakarta Ee,Jpa,Hibernate Mapping,我有两个具有多对多关系的表,它们具有可连接的用户服务,如下所示 @Entity public class User implements Serializable { @NotNull @Column(unique=true) private String username; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") private
@Entity
public class User implements Serializable {
@NotNull
@Column(unique=true)
private String username;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "USER_SERVICES",
joinColumns = {@JoinColumn(name = "id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "", referencedColumnName = "name")})
private Set<Services> services;
// Getters and Setters
}
@Entity
public class Services implements Serializable {
@NotNull
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long serviceId;
@NotNull
@Column(unique=true)
private String name;
//Getters and Setters
}
@实体
公共类用户实现可序列化{
@NotNull
@列(唯一=真)
私有字符串用户名;
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“id”)
私人长id;
@ManyToMany(fetch=FetchType.EAGER)
@可接合(
name=“用户服务”,
joinColumns={@JoinColumn(name=“id”,referencedColumnName=“id”)},
inverseJoinColumns={@JoinColumn(name=,referencedColumnName=“name”)}
专用集服务;
//接球手和接球手
}
@实体
公共类服务实现可序列化{
@NotNull
@GeneratedValue(策略=GenerationType.AUTO)
@身份证
私人长期服务ID;
@NotNull
@列(唯一=真)
私有字符串名称;
//接球手和接球手
}
上面的代码创建了一个表USER\u SERVICES,但我还希望表USER\u SERVICES与另一个表RATINGS之间有一个多对多关系,这将导致另一个表USER\u SERVICES\u RATINGS。如何使用Hibernate/JPA注释定义此关系?您需要创建一个显式的
UserServices
实体,并根据需要设置与评级
实体的关系
请记住,在hibernate中,您可以建模实体(即java对象)之间的关系,而不是db表。您需要创建一个显式的
UserServices
实体,并根据需要设置与评级
实体的关系
请记住,在hibernate中,您可以建模实体(即java对象)之间的关系,而不是db表。您需要创建一个显式的
UserServices
实体,并根据需要设置与评级
实体的关系
请记住,在hibernate中,您可以建模实体(即java对象)之间的关系,而不是db表。您需要创建一个显式的
UserServices
实体,并根据需要设置与评级
实体的关系
请记住,在hibernate中,您对实体(即java对象)之间的关系进行建模,而不是db表。使用用户管理的联接表对象(相对常见)进行双向多对多建模。 当您希望在联接对象上存储额外信息(如创建关系的日期)时通常使用
public class Foo{
private UUID fooId;
@OneToMany(mappedBy = "bar", cascade=CascadeType.ALL)
private List<FooBar> bars;
}
public class Bar{
private UUID barId;
@OneToMany(mappedBy = "foo", cascade=CascadeType.ALL)
private List<FooBar> foos;
}
@Entity
@Table(name="FOO_BAR")
public class FooBar{
private UUID fooBarId;
@ManyToOne
@JoinColumn(name = "fooId")
private Foo foo;
@ManyToOne
@JoinColumn(name = "barId")
private Bar bar;
//You can store other objects/fields on this table here.
}
公共类Foo{
私有UUID-fooId;
@OneToMany(mappedBy=“bar”,cascade=CascadeType.ALL)
私人酒吧名单;
}
公共类酒吧{
私人UUID barId;
@OneToMany(mappedBy=“foo”,cascade=CascadeType.ALL)
私人名单;
}
@实体
@表(name=“FOO\u BAR”)
公共级FooBar{
私人UUID fooBarId;
@许多酮
@JoinColumn(name=“fooId”)
私人富福;
@许多酮
@JoinColumn(name=“barId”)
私人酒吧;
//您可以在此表上存储其他对象/字段。
}
使用用户管理的联接表对象的双向多对多(相对常见)
当您希望在联接对象上存储额外信息(如创建关系的日期)时通常使用
public class Foo{
private UUID fooId;
@OneToMany(mappedBy = "bar", cascade=CascadeType.ALL)
private List<FooBar> bars;
}
public class Bar{
private UUID barId;
@OneToMany(mappedBy = "foo", cascade=CascadeType.ALL)
private List<FooBar> foos;
}
@Entity
@Table(name="FOO_BAR")
public class FooBar{
private UUID fooBarId;
@ManyToOne
@JoinColumn(name = "fooId")
private Foo foo;
@ManyToOne
@JoinColumn(name = "barId")
private Bar bar;
//You can store other objects/fields on this table here.
}
公共类Foo{
私有UUID-fooId;
@OneToMany(mappedBy=“bar”,cascade=CascadeType.ALL)
私人酒吧名单;
}
公共类酒吧{
私人UUID barId;
@OneToMany(mappedBy=“foo”,cascade=CascadeType.ALL)
私人名单;
}
@实体
@表(name=“FOO\u BAR”)
公共级FooBar{
私人UUID fooBarId;
@许多酮
@JoinColumn(name=“fooId”)
私人富福;
@许多酮
@JoinColumn(name=“barId”)
私人酒吧;
//您可以在此表上存储其他对象/字段。
}
使用用户管理的联接表对象的双向多对多(相对常见)
当您希望在联接对象上存储额外信息(如创建关系的日期)时通常使用
public class Foo{
private UUID fooId;
@OneToMany(mappedBy = "bar", cascade=CascadeType.ALL)
private List<FooBar> bars;
}
public class Bar{
private UUID barId;
@OneToMany(mappedBy = "foo", cascade=CascadeType.ALL)
private List<FooBar> foos;
}
@Entity
@Table(name="FOO_BAR")
public class FooBar{
private UUID fooBarId;
@ManyToOne
@JoinColumn(name = "fooId")
private Foo foo;
@ManyToOne
@JoinColumn(name = "barId")
private Bar bar;
//You can store other objects/fields on this table here.
}
公共类Foo{
私有UUID-fooId;
@OneToMany(mappedBy=“bar”,cascade=CascadeType.ALL)
私人酒吧名单;
}
公共类酒吧{
私人UUID barId;
@OneToMany(mappedBy=“foo”,cascade=CascadeType.ALL)
私人名单;
}
@实体
@表(name=“FOO\u BAR”)
公共级FooBar{
私人UUID fooBarId;
@许多酮
@JoinColumn(name=“fooId”)
私人富福;
@许多酮
@JoinColumn(name=“barId”)
私人酒吧;
//您可以在此表上存储其他对象/字段。
}
使用用户管理的联接表对象的双向多对多(相对常见)
当您希望在联接对象上存储额外信息(如创建关系的日期)时通常使用
public class Foo{
private UUID fooId;
@OneToMany(mappedBy = "bar", cascade=CascadeType.ALL)
private List<FooBar> bars;
}
public class Bar{
private UUID barId;
@OneToMany(mappedBy = "foo", cascade=CascadeType.ALL)
private List<FooBar> foos;
}
@Entity
@Table(name="FOO_BAR")
public class FooBar{
private UUID fooBarId;
@ManyToOne
@JoinColumn(name = "fooId")
private Foo foo;
@ManyToOne
@JoinColumn(name = "barId")
private Bar bar;
//You can store other objects/fields on this table here.
}
公共类Foo{
私有UUID-fooId;
@OneToMany(mappedBy=“bar”,cascade=CascadeType.ALL)
私人酒吧名单;
}
公共类酒吧{
私人UUID barId;
@OneToMany(mappedBy=“foo”,cascade=CascadeType.ALL)
私人名单;
}
@实体
@表(name=“FOO\u BAR”)
公共级FooBar{
私人UUID fooBarId;
@许多酮
@JoinColumn(name=“fooId”)
私人富福;
@许多酮
@JoinColumn(name=“barId”)
私人酒吧;
//您可以在此表上存储其他对象/字段。
}
您可以在Hibernate映射和注释中找到有用的注释。谢谢@JamesMassey,根据您的教程,我能够解决我的问题。如果您还可以为许多人在CascadeType上添加更多的代码,那就太好了。如果您可以在此处复制粘贴教程中的代码,我将接受您的答案。如果您觉得有帮助,请不要忘记升级投票:Pyou可能会发现Hibernate映射和注释很有帮助。谢谢@JamesMassey,根据您的教程,我能够解决我的问题。如果您还可以为许多人在CascadeType上添加更多的代码,那就太好了。如果可以的话