gpt4 book ai didi

java - JPA - 错误的重复外键

转载 作者:行者123 更新时间:2023-12-01 12:37:22 27 4
gpt4 key购买 nike

我正在使用@ElementCollectionon一组角色类型,但它插入正在测试的第一个主键,同时添加第三个条目,但它是一个重复的键。这是错误的 key 。我不确定它是否在我的测试中,或者本质上我是如何执行实体管理器的。正如您所看到的,user_id 在用户角色表上只有第一个 ID 而没有第二个 ID。 enter image description here enter image description hereDAO

@Entity
@Table(name = "users")
public class DefaultUser implements Serializable
{
@Id
@SequenceGenerator(name="user_id_seq_gen", sequenceName="USER_ID_SEQ")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="user_id_seq_gen")
@Column(name = "user_id", nullable = false)
@OrderColumn
private long user_id;

@Column(name = "user_name")
private String user_name;

@Column(name = "first_name")
private String firstName;

@Column(name = "last_name")
private String lastName;

@Column(name = "password")
private String password;



@ElementCollection(targetClass=UserType.class, fetch = FetchType.EAGER)
@CollectionTable(
name="user_roles",
joinColumns=@JoinColumn(name="user_id")
)
@Enumerated(EnumType.STRING)
@Column(name="role_type")
@OrderColumn
private Set<UserType> userRoleSet = new HashSet<UserType>();

//getters and setters
}

测试方法

    public class UserDTOTest
{

JpaUserDAO userDAO = new JpaUserDAO(EntityManagerUtil.getEntityManager());

DefaultUser user = new DefaultUser();
user.setUser_name("user");
user.setPassword("ddafsf");
user.setFirstName("dadafddfsffsd");
user.setLastName("dafddfafdfsasdf");
Set<UserType> userTypeSet = new HashSet<UserType>();
userTypeSet.add(UserType.BROKER);
userTypeSet.add(UserType.SHAREHOLDER);

user.setUserRoleSet(userTypeSet);
userDAO.persist(user);

//JpaUserDAO userDAO1 = new JpaUserDAO(EntityManagerUtil.getEntityManager());
DefaultUser user2 = new DefaultUser();
user2.setUser_name("user1");
user2.setPassword("a342fsd");
user2.setFirstName("some54thing");
user2.setLastName("diff435ernt");
Set<UserType> userTypeSet2 = new HashSet<UserType>();
userTypeSet.add(UserType.ADMIN);

user2.setUserRoleSet(userTypeSet2);
userDAO.persist(user2);

}
}

JPA DAO

 public abstract class JpaDao<K, E> implements DAO<K, E>
{
protected Class<E> entityClass;

protected EntityManager entityManager;

public JpaDao(EntityManager entityManager)
{
this.entityManager = entityManager;
ParameterizedType genericSuperclass = (ParameterizedType) getClass()
.getGenericSuperclass();
this.entityClass = (Class<E>) genericSuperclass
.getActualTypeArguments()[1];
}

/**
* Create a new user record in the database.
*
* @param entity
* User to be created.
* @return the ID of saved User.
*/
public void persist(E entity)
{
entityManager.getTransaction().begin();
entityManager.persist(entity);
entityManager.getTransaction().commit();
}

public void remove(E entity)
{
entityManager.getTransaction().begin();
entityManager.remove(entity);
entityManager.getTransaction().commit();
}

public E findById(K id)
{
entityManager.getTransaction().begin();
entityManager.getTransaction().commit();
return entityManager.find(entityClass, id);

}

}

最佳答案

您应该替换 userTypeSet.add(UserType.ADMIN); userTypeSet2.add(UserType.ADMIN);

关于java - JPA - 错误的重复外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25467921/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com