gpt4 book ai didi

java - @NotNull 在类里面被忽略

转载 作者:行者123 更新时间:2023-11-30 10:13:16 24 4
gpt4 key购买 nike

我有一个实体:

@Entity
public class MyEntity {

@Id
private String Id;

@NotNull
@Column(nullable = false)
private Integer size;

public void setSize(Integer size) { this.size = size; }
public Integer getSize() { return this.size; }

public void setId(String id) { this.id = id; }
public String getId() { return this.id; }
}

存储库:

@Repository
public class MyEntityDAO {

@PersistenceContext
private EntityManager em;

public void create(MyEntity myEntity) {
em.persist(myEntity);
}
}

应该抛出异常的测试:

@RunWith(SpringRunner.class)
@Transactional
@SpringBootTest
public class MyEntityDAOTest {

@Inject
private MyEntityDAO myEntityDAO;

@Test(expected = ConstraintViolationException.class)
public void nullSizeNotAllowedTest() {
MyEntity myEntity = new MyEntity();
myEntity.setSize(null);
myEntity.setId("entity_id");
myEntityDAO.create(myEntity);
}
}

但是测试失败了。实体不会抛出所需的异常。注释适用于字符串,但不适用于整数。

为 MyEntity 自动生成的表:

FIELD   TYPE            NULL    KEY     DEFAULT  
ID VARCHAR(255) NO PRI NULL
SIZE INTEGER(10) NO NULL

更新

当我将 @GeneratedValue(strategy = ...) 指定到 Id 字段时,一切正常。但是,我希望能够将自己的值分配给主键字段。

更新 2

更新实体(更新存储库以反射(reflect)更改):

@Entity
public class MyEntity {

@Id
private Long Id;

@NaturalId
private String oldId;

@NotNull
@Column(nullable = false)
private Integer size;

/* getters and setters */
}

为 MyEntity 自动生成的表:

FIELD   TYPE            NULL    KEY     DEFAULT  
ID BIGINT(19) NO PRI NULL
OLD_ID VARCHAR(255) YES UNI NULL
SIZE INTEGER(10) NO NULL

最佳答案

您必须在调用 entityManager.save() 之后调用 entityManager.flush()

否则,将不会抛出异常,也不会在您的测试中提取异常。

这是一个完整的工作示例:

我的实体:

@Entity
public class MyEntity {

@Id
private String id;

@Column(nullable = false)
@NotNull
private Integer size;

public MyEntity(){}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public Integer getSize() {
return size;
}

public void setSize(Integer size) {
this.size = size;
}
}

MyEntityDAO:

@Repository
public class MyEntityDAO {

@PersistenceContext
private EntityManager entityManager;

public void save(MyEntity myEntity){
entityManager.persist(myEntity);
entityManager.flush();
}
}

MyEntityDAOTest:

@RunWith(SpringRunner.class)
@Transactional
@SpringBootTest
public class MyEntityDAOTest {

@Autowired
private MyEntityDAO myEntityDAO;

@Test(expected = ConstraintViolationException.class)
public void nullSizeNotAllowedTest() throws Exception {
MyEntity myEntity = new MyEntity();
myEntity.setId("testId");
myEntity.setSize(null);
myEntityDAO.save(myEntity);
}
}

关于java - @NotNull 在类里面被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51398878/

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