Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee JPA。两个实体之间使用何种关系。(无法从一个实体中删除记录)_Jakarta Ee_Jpa_Mapping_Entity_Entity Relationship - Fatal编程技术网

Jakarta ee JPA。两个实体之间使用何种关系。(无法从一个实体中删除记录)

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

我在寻找一些信息后写信给你,但由于英语不是我的第一语言,我可能错过了问题的答案

说明: 我有两个实体。假设其中一个是User,另一个是UsersAttributes。 用户将如下所示:

@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;