对实体类中的一个字段使用@Id注释,并使用jpa persist方法将相同的数据插入两次。数据插入成功的时间,即插入的重复数据。 @Id表示主键,主键应该是唯一的,但是这里插入了重复值。 注意:在创建表时,我没有在数据库端指定主键约束。 下面是实体类。
`@Entity
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private BigDecimal employeeid;
private String firstname;`
private String lastname;
private long salary;
//这里的getters和setter }
请解释为什么jpa实体允许使用@Id属性的重复记录。
答案 0 :(得分:1)
您需要指定主键生成策略。 JPA将使用此策略生成主键。
生成策略可能会有所不同,具体取决于您使用的数据库供应商。
e.g。对于MYSQL服务器,请注释主键,如下所示:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private BigDecimal employeeId;
这将为新实体生成增量主键。
回答你的问题, ORM不会告诉你同一个实体的重复条目持续两次。 ORM取决于主键。
您应该在列中添加唯一约束。如果持久化逻辑重复实体,这将抛出包含在avax.persistence.PersistenceException中的SQLIntegrityConstraintViolationException异常。抓住这个例外并处理它。