我有一个模型Parent,它有一个Children列表(List
class Parent {
@OneToMany(targetEntity = Child.class, cascade = CascadeType.ALL, mappedBy = "parent")
@JsonManagedReference
private List<Child> tags = new ArrayList<>();
@Column(name = "name")
public String name;
}
class Child {
@Column(name = "name")
public String name;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id", nullable = true)
@JsonBackReference
private Parent parent;
}
我在EAGER模式下选择包含子项的父项列表(List&lt; Parent&gt;)。
现在,儿童可以使用相同的名称,但我不希望名称相同的儿童在列表中多次出现。 有任何建议如何在集合中只有一次具有相同名称的孩子吗?
答案 0 :(得分:1)
以下是使用set
删除重复值的示例代码。如果firstName存在,则忽略第二个条目。您可以根据需要进行修改。
然而,虽然这是你问过的问题的答案,但请注意这里有代码味道。 他们确实你必须在代码中执行此操作,而数据库允许它是有问题的并且几乎可以保证设计缺陷。
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Test
{
private String firstName;
private String lastName;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((firstName == null) ? 0 : firstName.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Test other = (Test) obj;
if (firstName == null) {
if (other.firstName != null)
return false;
} else if (!firstName.equals(other.firstName))
return false;
return true;
}
public Test(String firstName, String lastName) {
super();
this.firstName = firstName;
this.lastName = lastName;
}
public static void main(String[] args)
{
List<Test> aList = new ArrayList<Test>();
Test test1 = new Test("Tom","Hardy");
Test test2 = new Test("Tom","Cruise");
Test test3 = new Test("Any","Body");
aList.add(test1);
aList.add(test2);
aList.add(test3);
System.out.println("List values:");
for (Test test : aList)
{
System.out.println(test.firstName + "-"+ test.lastName);
}
Set<Test> alphaSet = new HashSet<Test>(aList);
System.out.println("Set values:");
for (Test test : alphaSet)
{
System.out.println(test.firstName + "-"+ test.lastName);
}
}
}