Jakarta ee JPA。两个实体之间使用何种关系。(无法从一个实体中删除记录)
我在寻找一些信息后写信给你,但由于英语不是我的第一语言,我可能错过了问题的答案 说明: 我有两个实体。假设其中一个是User,另一个是UsersAttributes。 用户将如下所示:Jakarta ee JPA。两个实体之间使用何种关系。(无法从一个实体中删除记录),jakarta-ee,jpa,mapping,entity,entity-relationship,Jakarta Ee,Jpa,Mapping,Entity,Entity Relationship,我在寻找一些信息后写信给你,但由于英语不是我的第一语言,我可能错过了问题的答案 说明: 我有两个实体。假设其中一个是User,另一个是UsersAttributes。 用户将如下所示: @Entity @NamedQueries({ //some queries }) public class User implements Serializable { @Id @GeneratedValue(strategy= GenerationType.AUTO) pri
@Entity
@NamedQueries({
//some queries
})
public class User implements Serializable
{
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;
@ManyToMany
private List<UserAttributes> attributes;
//getters, setters, constructors, equals, hashCode..
}
我想要的效果是:
用户是关系的拥有方。
UserAttributes是,我不知道我是否正确地将其称为字典-来自该实体的值可以由用户实体的任何对象定义。例如
user1 has UserAttributes 1,2
user2 has UserAttributes 2,3
user3 has UserAttributes 1,2,3
user4 has no UserAttributes
我希望UserAttributes记录可以重用
我写的代码运行得很好,实体之间的值分配得很好,但是
When I want to remove a record from UserAttributes I can't do it if it is already
in possesion of some User. How to solve this, what kind of mapping I should use,
should I used **cascade** attribute, and how to do this?
首先谢谢
征求意见。
我想我用mappedBy属性解决了这个问题。在UserAttributes中,我添加了以下内容:
@ManyToMany(mappedBy="attributes")
private List<User> users;
在用户界面中,我没有改变任何东西。现在我可以不经意地从用户实体中删除属性,并且更改会传播到所有记录上,没有例外。您应该执行User.getAttributes.removetheAttributeToRemove。这就是你所需要的。你应该展示你的代码并准确地告诉我们发生了什么,而不是仅仅说我做不到。是的,这是可行的,但这不是我想要做的。我有一个简单的jsf页面,列出了所有的UserAttributes。我选择了一个elementuserAttribute,我用一个按钮操作将其删除。当我选择一个与任何用户记录都不相关的UserAttribute时,它可以正常工作,但是当我选择一个已经相关的UserAttribute时,我有一个异常。我希望能够删除这些属性,而不必担心用户的真实性。我希望避免遍历所有用户,并为每个用户删除相同的元素。我不知道这样做是否有效,可能会非常低效。啊,所以你不想从用户中删除属性。您希望删除用户已引用的属性。如果不想使用SQL,则需要查找具有此属性的所有用户,从这些用户中删除该属性,然后删除该属性。
@ManyToMany(mappedBy="attributes")
private List<User> users;