- 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/
我正在编写一个 JS 程序,我有一个条件可以根据输入进行一些算术运算。如果我遇到操作类型为“add”,我需要将两个值相加;如果我得到“times”作为我的运算符值,我需要相乘。 我尝试使用基本的 if
我正在编写一个仅作为查看器的应用程序 - 无需创建、无需编辑、无需保存。 显然,那么,不会有自动保存,但是还有什么其他东西可以从 autosavesInPlace 返回 YES 改变世界,从而对观看者
Azure 开始出现以下错误: Unsupported token. Unable to initialize the authorization context. 每当我尝试更改我的应用程序时,我都
当我编写 out.println() 时,Eclipse 提示 out 无法解析。 我导入了 java.io.* 和其他 servlet 包。 最佳答案 只是在黑暗中拍摄,我认为这就是您正在寻找的出路
Azure 开始出现以下错误: Unsupported token. Unable to initialize the authorization context. 每当我尝试更改我的应用程序时,我都
是否可以执行类似的操作来检查 radio 表单是否未选中: if !($(this).find("input:checked")) {} 正确的语法是什么? 最佳答案 试试这个: $(this).fi
我正在尝试从表中选择行,其中 date 列值等于澳大利亚悉尼的当前日期 (UTC+10h)。服务器位于悉尼,因此我想使用 SYSDATETIME()。这是我的查询: SELECT * FROM dat
我听说 JavaScript 实际上并不像其他语言那样“指向”内存中的值(或对象,因为在 JS 中一切都是对象)。相反,JS 变量引用内存中的其他值/对象。这是真的?指向和引用之间的语义区别是什么?
我的计算机科学类(class)有一项作业,其中要求读取包含多个测试分数的文件,并要求我对它们进行求和并求平均值。虽然求和和求平均值很容易,但我在读取文件时遇到问题。老师说用这个语法 Scanner s
Java 的 XML 解析器似乎认为我的 XML 文档在根元素之后的格式不正确。但我已经用几种工具验证了它,但他们都不同意。这可能是我的代码错误,而不是文档本身的错误。如果你们能给我提供任何帮助,我将
根据这份文件: http://www.stroustrup.com/terminology.pdf l 值具有同一性且不可移动。 公关值是可移动的,但没有身份。 x 值具有同一性并且是可移动的。 关于
这个问题在这里已经有了答案: What does "atomic" mean in programming? (7 个答案) 关闭 5 年前。 我正在阅读 MongoDB 的 documentati
在 PHP 和 MySQL 中有没有一种方法能够比较 2 个不同的数组(列表)变量并说出有多少项是相同的 例如, $array1 = "hello, bye, google, laptop, yes"
本文来自 Effective Java Programs that use the int enum pattern are brittle. Because int enums are compil
C++ 中有一些特性是类型安全的,而另一些则不是。 C++ 类型安全示例: char c = 'a'; int *p = &c; // this is not allowed (compiler
我有一个 CS 课的作业,它说要读取一个包含多个测试分数的文件,并要求我对它们求和并取平均值。虽然求和和平均很容易,但我在读取文件时遇到了问题。老师说要用这个语法 Scanner scores = n
嗯.. 有时,PyDev 会说“ Unresolved 导入错误”。 在我的环境中 Python2.6.6 Eclipse3.7 PyDev2.2.2 错误是。 > Unresolved import
我正在向服务器发送请求,服务器正在处理请求并做出响应。但是在我的应用程序中,我收到了: Error Domain=NSURLErrorDomain Code=-1017 "cannot parse r
在我最近的一次讨论中,有人告诉我这样说是不正确的,因为 Ajax 已经是 Javascript。 上下文: “我如何在网页中 blablababal,这样它就不必刷新页面” 我的回答: “使用 Jav
下午好。 我一直在尝试使用 ffmpeg 将 .mpeg 拆分为一系列 .jpeg 图像。请注意,这是指定 here 的逆问题,但我面临的问题与该线程的作者面临的问题不同。 具体来说,我已经在我的 f
我是一名优秀的程序员,十分优秀!