- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我真的很难弄清楚这一点。我有两个类 Employee 和 Role:
@Entity
@Table(name = "employees")
public class Employee implements Serializable {
private static final long serialVersionUID = 5468763051360122059L;
@Id
@Column(name = "employee_guid", length = 36)
@NotNull
@Size(min = 36, max = 36)
private String id;
@Column(name = "is_active", nullable = false)
private boolean isActive;
@ManyToMany(mappedBy = "employees", fetch = FetchType.LAZY, cascade = {
CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH,
CascadeType.DETACH })
@NotEmpty
@Valid
private List<Role> roles;
@OneToMany(mappedBy = "employee", fetch = FetchType.LAZY, cascade = {
CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH,
CascadeType.DETACH }, orphanRemoval = true)
@Valid
private List<VacationRequest> vacationRequests;
@OneToMany(mappedBy = "manager", fetch = FetchType.LAZY, cascade = {
CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH,
CascadeType.DETACH }, orphanRemoval = true)
private List<ManagerSubordinate> managers;
protected Employee() {
vacationRequests = new ArrayList<VacationRequest>();
managers = new ArrayList<ManagerSubordinate>();
}
public Employee(UUID id, List<Role> roles) {
this(id, roles, true);
}
public Employee(UUID id, List<Role> roles, boolean isActive) {
this();
if (id == null) {
throw new NullPointerException("id cannot be null");
}
this.id = id.toString();
this.roles = roles;
this.isActive = isActive;
}
public UUID getId() {
return UUID.fromString(id);
}
public boolean isActive() {
return isActive;
}
public void setActive(boolean isActive) {
this.isActive = isActive;
}
public List<Role> getRoles() {
return roles;
}
public void setRoles(List<Role> roles) {
this.roles = roles;
}
public List<VacationRequest> getVacationRequests() {
return vacationRequests;
}
public void setVacationRequests(List<VacationRequest> vacationRequests) {
this.vacationRequests = vacationRequests;
}
public List<ManagerSubordinate> getManagers() {
return managers;
}
public void setManagers(List<ManagerSubordinate> managers) {
this.managers = managers;
}
}
@Entity
@Table(name = "application_roles", uniqueConstraints = { @UniqueConstraint(name = "UK_ROLE_NAME",
columnNames = "name") })
public class Role implements Serializable {
private static final long serialVersionUID = -6126630712163059772L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(nullable = false, length = 50)
@NotNull
@Size(min = 5, max = 50)
private String name;
@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST,
CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH })
@JoinTable(name = "employees_application_roles", joinColumns = { @JoinColumn(name = "employee_guid",
nullable = false) }, inverseJoinColumns = { @JoinColumn(name = "role_id", nullable = false) },
foreignKey = @ForeignKey(name = "FK_EMPLOYEE_ROLE", value = ConstraintMode.CONSTRAINT),
inverseForeignKey = @ForeignKey(name = "FK_ROLE_EMPLOYEE", value = ConstraintMode.CONSTRAINT))
@Valid
private List<Employee> employees;
protected Role() {
employees = new ArrayList<Employee>();
}
public Role(String name) {
this();
this.name = name;
}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
}
此外,Employee 与其自身具有多对多关系:
@Embeddable
public class ManagerSubordinateId implements Serializable {
private static final long serialVersionUID = 2145140927848605356L;
@Column(name = "manager_guid", length = 36)
@NotNull
@Size(min = 36, max = 36)
private String managerId;
@Column(name = "subordinate_guid", length = 36)
@NotNull
@Size(min = 36, max = 36)
private String subordinateId;
protected ManagerSubordinateId() {
}
public ManagerSubordinateId(UUID managerId, UUID subordinateId) {
this();
this.managerId = managerId.toString();
this.subordinateId = subordinateId.toString();
}
public UUID getManagerId() {
return UUID.fromString(managerId);
}
public void setManagerId(UUID managerId) {
this.managerId = managerId.toString();
}
public UUID getSubordinateId() {
return UUID.fromString(subordinateId);
}
public void setSubordinateId(UUID subordinateId) {
this.subordinateId = subordinateId.toString();
}
@Override
public int hashCode() {
return managerId.hashCode() + subordinateId.hashCode();
}
@Override
public boolean equals(Object obj) {
if(obj == null)
return false;
if(!(obj instanceof ManagerSubordinateId))
return false;
ManagerSubordinateId other = (ManagerSubordinateId) obj;
if(!(other.getManagerId().equals(getManagerId())) ||
!(other.getSubordinateId().equals(getSubordinateId()))) {
return false;
}
return true;
}
}
@Entity
@Table(name = "managers_subordinates", uniqueConstraints = @UniqueConstraint(name = "UK_MANAGER_SUBORDINATE",
columnNames = { "manager_guid", "subordinate_guid", "management_type" }))
public class ManagerSubordinate implements Serializable {
private static final long serialVersionUID = 7676137409755328186L;
@EmbeddedId
@NotNull
@Valid
private ManagerSubordinateId managerSubordinateId;
@MapsId("managerId")
@JoinColumn(name = "manager_guid", nullable = false, insertable = false,
updatable = false, foreignKey = @ForeignKey(name = "FK_EMPLOYEE_MANAGER",
value = ConstraintMode.CONSTRAINT))
@ManyToOne(optional = false, fetch = FetchType.LAZY, cascade = {
CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH,
CascadeType.DETACH })
@NotNull
@Valid
private Employee manager;
@MapsId("subordinateId")
@JoinColumn(name = "subordinate_guid", nullable = false, insertable = false,
updatable = false, foreignKey = @ForeignKey(name = "FK_EMPLOYEE_SUBORDINATE",
value = ConstraintMode.CONSTRAINT))
@ManyToOne(optional = false, fetch = FetchType.LAZY, cascade = {
CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH,
CascadeType.DETACH })
@NotNull
@Valid
private Employee subordinate;
@Enumerated(EnumType.ORDINAL)
@Column(name = "management_type", nullable = false)
@NotNull
private ManagementType managementType;
protected ManagerSubordinate() {
}
public ManagerSubordinate(ManagerSubordinateId managerSubordinateId, Employee manager, Employee subordinate,
ManagementType managementType) {
this();
this.managerSubordinateId = managerSubordinateId;
this.manager = manager;
this.subordinate = subordinate;
this.managementType = managementType;
}
public ManagerSubordinateId getManagerSubordinateId() {
return managerSubordinateId;
}
public void setManagerSubordinateId(ManagerSubordinateId managerSubordinateId) {
this.managerSubordinateId = managerSubordinateId;
}
public Employee getManager() {
return manager;
}
public void setManager(Employee manager) {
this.manager = manager;
}
public Employee getSubordinate() {
return subordinate;
}
public void setSubordinate(Employee subordinate) {
this.subordinate = subordinate;
}
public ManagementType getManagementType() {
return managementType;
}
public void setManagementType(ManagementType managementType) {
this.managementType = managementType;
}
}
当我尝试像这样拯救员工时:
Role employeeRole = new Role("Employee");
Employee employee = new Employee(UUID.randomUUID(), Arrays.asList(employeeRole));
employeeRole.getEmployees().add(employee);
employeeRepository.save(employee);
由于约束验证错误,保存失败,该错误表明员工内部的角色字段为空,即使它不是空的(角色被传递给构造函数)。 @NotEmpty 注释似乎存在一些问题。谁能告诉我我做错了什么?
最佳答案
我也遇到过类似的问题,似乎是hibernate中的一个错误。验证 Set 或使用 CascadeType.MERGE 时会出现此问题,仅当不使用 hibernate 提供的 @Id 生成策略之一时才会出现此问题。看来你也有同样的问题HHH-10246
关于java - Hibernate validator 总是说集合为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22938574/
当我尝试输入时,我正在关注 Ray Wenderlich ( https://videos.raywenderlich.com/screencasts/545-server-side-swift-wi
我正在使用 javax.validation.Validation 来验证 jpa 实体。我总是针对相同的实体进行验证。 我想知道是对所有验证使用一个 validator 更好,还是每次验证时实例化一
Controller : @RequestMapping(...) public void foo(@Valid Parent p){ } class Parent { @NotNull // j
在 login.phtml 中,validator 和 validate 之间有什么区别 - 有人可以解释下面每一行的含义 function onepageLogin(button)
我有一个 java bean 用于将 JSON 消息发送到 spring @RestController 并且我有 bean 验证设置并使用 @Valid 运行得很好。但我想转移到 Protobuf/
我正在使用 vee-validate 来验证注册表单,我编写了如下代码,
使用 有什么区别属性和 标签? 我应该什么时候使用哪一种? 最佳答案 validator属性允许您引用独立的托管 bean 方法,而不仅仅是像这样的验证器
我们有这个 Alamofire 错误处理: Alamofire.request(.GET, getUrl("mystuff")).responseData { response in guar
以下代码创建了两个单选按钮。每个选项都包含一个日期值,该日期值已成功转换为格式为“yyyy-MM-dd”的标签。一旦我做出选择并单击下一步按钮,我就会收到以下错误“j_idt12:comDateCho
是否有类似的验证: req.checkBody('property', 'should be present').isPresent(); 值本身并不重要。 现在我使用这个解决方案: .isLengt
系列文章: 1、async-validator 源码学习(一):文档翻译 2、async-validator 源码学习笔记(二):目录结构 3、async-validator 源码学习笔记(三):ru
我正在使用 Backbone.Validation插入。我有一个模型可以在服务器端进行唯一性检查。我如何让 backbone.validation 识别错误并运行我设置的回调以显示返回的错误消息? t
我有一个 Knockout.Validation 场景,我认为该场景相当普遍,但尚未通过在网络上搜索和本网站上的各种答案找到解决方案。 我正在验证的属性在 ajax 调用之后才会添加到可观察到的 kn
我是 Knockout JS 的新手。我需要一个验证器来验证用户将在文本框中输入的日期。为此编写了如下代码 ko.validation.rules['date'] = { validator:
如何在 JSF 验证器中比较两个字符串是否相等? if (!settingsBean.getNewPassword().equals(settingsBean.getConfirmPassword()
我有简单的域: package app class Customers { String CUSTOMER String NOTE static mapping = {
我正在使用 ember-validations 来验证表单中的模型。 如果我使用 createRecord 创建记录,则模型的实例已经过验证,因此在用户输入值之前表单已经显示验证错误。 我只想在提交表
我有两种不同的服务:第一个是将对象保存到数据库,第二个是更新现有对象。 我正在对我的对象使用验证约束,例如(@NotBlank、@Size、@Pattern 等),在第一种情况下,我需要验证对象的所有
我有 2 个 ensure - 验证装饰器用于 2 个字段:password 和 retypePassword。我想在填写 retypePassword 字段时检查这两个字段是否相等。 问题是,当我在
I'm aware that it's a bug ,但是在域类上调用 validate() 会覆盖之前放入的任何拒绝: def save = { def assignment = new A
我是一名优秀的程序员,十分优秀!