如何用额外的列保存多对多映射对象?专列为“审批”。对于多对多注释,我只调用了setUsersDocuments(users),它工作正常...我怎样才能使它工作与额外的列?
文件
@JsonIgnore
@OneToMany(mappedBy = "document")
private List<UsersDocuments> documentsForUsers;
用户类
@OneToMany(mappedBy = "user", orphanRemoval = true, cascade= CascadeType.ALL)
private List<UsersDocuments> usersDocuments;
主键
@Embeddable
public class UserDocumentsId implements Serializable {
@Column(name="user_id")
private long user;
@Column(name="document_id")
private long document;
多对多表
@Entity
@Table(name="users_documents")
public class UsersDocuments {
@EmbeddedId
private UserDocumentsId id;
@ManyToOne(fetch = FetchType.LAZY)
@MapsId("user")
@JoinColumn(name = "user_id")
private User user;
@ManyToOne(fetch = FetchType.LAZY)
@MapsId("document")
@JoinColumn(name = "document_id")
private Document document;
@Column(name="approval")
private boolean approval;
正在保存单据
Document document = new Document(title, desc);
document.setUploadDatetime(new Date());
document.setUser(user.get());
List<User> users = userService.getUsersByRoles(roles);
// document.setDocumentsForUsers(users); THIS WAS WHEN USING ONLY MANY TO MANY ANNOTATION
documentService.saveDocument(document);
编辑:unsuccessfull保存对象-Document.GetDocumentsForUsers().Add(userDocuments)null.
Optional<User> user = userService.getUserByEmail(createdBy);
Document document = new Document(title, desc);
document.setUploadDatetime(new Date());
document.setUser(user.get());
List<User> users = userService.getUsersByRoles(roles);
for(User userx : users){
UsersDocuments userDocuments = new UsersDocuments();
UserDocumentsId id = new UserDocumentsId();
// Construct the Id with user and document
id.setUser(userx.getId());
id.setDocument(document.getId());
userDocuments.setId(id);
userDocuments.setApproval(true);
// This is very important for saving and cascading to work.
document.getDocumentsForUsers().add(userDocuments);
}
documentService.saveDocument(document);
编辑:错误
null
1)在单据实体中,增加UserDocuments关系级联:
@OneToMany(mappedBy = "document", cascade= CascadeType.ALL)
private List<UsersDocuments> usersDocuments;
2)您需要以不同的方式设置您的实体:
Document document = new Document(title, desc);
document.setUploadDatetime(new Date());
List<User> users = userService.getUsersByRoles(roles);
for(Use user: users){
UserDocuments userDocuments = new UserDocuments();
UserDocumentsId id = new UserDocumentsId();
// Construct the Id with user and document
id.setUser(user);
id.setDocument(document);
userDocuments.setDocumentsId(id);
userDocuments.setActivtity(true);
// This is very important for saving and cascading to work.
document.getUserDocuments().add(userDocuments);
}
documentService.saveDocument(document);
有两张数据表,通过第三张数据表来表示关联关系,我们称之为多对多的映射 如上图,通过一个中间数据表的两个字段,分别指向两个对象的主键,可以实现多对多映射。所以,Pet.foods(一个 List<Food>) 或者 Food.pets(一个List<Pet>)就是多对多映射。 在 POJO 中配置多对多映射 在 POJO 类中字段中增加注解 @ManyMany: @Table("t_food")
在我的Spring Boot应用程序中,我想将用户角色多对多关系保存在数据库中相应的映射表中,但hibernate给了我一条错误消息。 我的User.java班: 我的Role.java课: 我的跑步方法: Hibernate向我提供了一条错误消息: 无法添加或更新子行:外键约束失败(。, CONSTRAINTFOREIGN KEY()REFERENCES()ON DELETE CASCADE O
主要内容:@ManyToMany 示例,程序输出结果多对多映射表示集合值关联,其中任何数量的实体可以与其他实体的集合关联。 在关系数据库中,一个实体的任何行可以被引用到另一个实体的任意数量的行。 完整的项目目录结构如下所示 - @ManyToMany 示例 在这个例子中,我们将创建学生和图书馆之间的多对多关系,以便可以为任何数量的学生发放任何类型的书籍。 这个例子包含以下步骤 - 第1步: 在包中创建一个实体类,包含学生ID(s_id)和学生姓名(
有两张数据表,其中A表的某个字段的值指向B表的主键。因为B表的任何一条记录理论上可以对应A表的多条记录,所以称这种 映射为B表对A表数据的一对多映射。 上述结构,如果用 POJO 来表示的话,可以参看下图: 如上图,一个 Master 自然就能对应多个 Pet ,所以, Master.pets (一个 List<Pet>) 就可以指向多个 Pet 对象, 那么我们说 Master.pets 就是
问题内容: 我的数据库包含3个表:User和Service实体具有多对多关系,并与SERVICE_USER表联接在一起,如下所示: 用户-SERVICE_USER-服务 SERVICE_USER表包含附加的BLOCKED列。 执行这种映射的最佳方法是什么?这些是我的实体类 我遵循以下示例http://giannigar.wordpress.com/2009/09/04/m … using-jpa
问题内容: 我正在努力进行双向多对多映射,其中顺序在一侧很重要,而在另一侧则不重要。 我有两节课:程序和学生。 一个程序有很多学生,顺序很重要。 程序A 约翰 莎莉 赛斯 程式B 亚历克斯 赛斯 艾米 约翰 一个学生有很多程序,但是顺序在这里并不重要。 John 程序A 程序B 莎莉 程序A 赛斯 程序A 程式B 亚历克斯 程式B 艾米 程式B 因此,似乎我可以在程序和学生之间建立双向的多对多关联