Spring 关联表的JPA和数据库设置
对于如何在jpa中设置数据库和实体,我有点不知所措 我有一个Spring 关联表的JPA和数据库设置,spring,jpa,spring-data-jpa,Spring,Jpa,Spring Data Jpa,对于如何在jpa中设置数据库和实体,我有点不知所措 我有一个Attachments表,其中保存了上传的附件详细信息,如原始名称uid保存方式、保存日期等 其他几个表可以有附件,每个记录可以有多个附件 所以对于每个可以有附件的表,我会有一个id和附件id的关联表 Attachments ----------- ID Original Name Saved Name User ----------- Id Name Dog ----------- Id Breed Name Dog_Att
Attachments
表,其中保存了上传的附件详细信息,如原始名称uid保存方式、保存日期等
其他几个表可以有附件
,每个记录可以有多个附件
所以对于每个可以有附件的表,我会有一个id和附件id的关联表
Attachments
-----------
ID
Original Name
Saved Name
User
-----------
Id
Name
Dog
-----------
Id
Breed
Name
Dog_Attachments
----------------
dog_id
attachment_id
User_Attachments
----------------
user_id
attachment_id
所以我认为这是设置数据库的正确方法。。。
但是我如何设置我的JPA实体呢
@Entity
@Table(name = "User")
public class UserEntity {
@Id
private Long id;
@Column(name = "Name")
private String name;
...
List<Attachment> attachments;
...
}
@Entity
@Table(name = "user_attachment")
public class UserAttachment {
@Id
@Column(name = "user_id");
private Long userId;
@Id
@Column(name = "attachment_id")
private Long attachmentId
....
}
@Entity
@Table(name = "attachment")
public class Attachment {
@Column(name = "id");
private Long id;
@Column(name = "original_name")
private Long originalName
....
}
@实体
@表(name=“User”)
公共类用户实体{
@身份证
私人长id;
@列(name=“name”)
私有字符串名称;
...
列出附件;
...
}
@实体
@表(name=“user\u附件”)
公共类用户附件{
@身份证
@列(name=“user_id”);
私有长用户ID;
@身份证
@列(名称=“附件id”)
私人长附件
....
}
@实体
@表(name=“附件”)
公共类附件{
@列(name=“id”);
私人长id;
@列(名称=“原始名称”)
私有长源名称
....
}
可能吗?或者我必须将user上的列表更改为user_附件列表,然后user_附件添加加入吗?基本上,JPA可以“展平”我的对象,或者我必须您可能希望在模型中使用关系。SpringDataJPA负责创建连接表。如果您继续指定联接表实体,那么我担心您将无法在许多地方利用Spring数据的强大功能 因此,您需要创建以下关系:
/@实体和其他注释
公共类附件{
@身份证
@生成值
私人长id;
@列(nullable=false)
私有字符串url;
//在此处添加所有其他字段,如savedName、dates等
@许多酮
@JoinColumn(name=“附件\u id”)
私人用户;
@许多酮
@JoinColumn(name=“附件\u id”)
私家狗;
//标准构造函数、getter、setter
}
//@实体和其他注释
公共类用户{
//...
@OneToMany(mappedBy=“用户”)
私人设置附件;
//...
}
//@实体和其他注释
公家犬{
//...
@OneToMany(mappedBy=“dog”)
私人设置附件;
//...
}
这将为您创建一个双向关系。您可能还希望查看单向关系,其中关系的多对一将不存在。干杯 附件能否被许多用户/狗等引用?或者该附件只有一个关联实体?
// @Entity and other annotations
public class Attachment {
@Id
@GeneratedValue
private long id;
@Column(nullable=false)
private String url;
// add all other fields here, like savedName, dates, whatever
@ManyToOne
@JoinColumn(name="attachment_id")
private User user;
@ManyToOne
@JoinColumn(name="attachment_id")
private Dog dog;
// standard constructor, getter, setter
}
// @Entity and other annotations
public class User {
//...
@OneToMany(mappedBy = "user")
private Set<Attachment> attachments;
//...
}
// @Entity and other annotations
public class Dog {
//...
@OneToMany(mappedBy = "dog")
private Set<Attachment> attachments;
//...
}