У меня странное поведение, когда я выбираю сущность, которая является чем-то вроде «родителя» для другой сущности. Это мои классы сущностей:
Родительский объект ("одна сторона")
package so.lazy;
import java.util.LinkedHashSet;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.OneToMany;
@Entity
public class Parent extends Base {
private static final long serialVersionUID = -1111542804002616234L;
@OneToMany(mappedBy = "one")
private Set<Child> children = new LinkedHashSet<Child>();
// more fields
public Set<Child> getChildren() {
return children;
}
public void setChildren(Set<Child> children) {
this.children = children;
}
@Override
public String toString() {
return "Parent{" +
"dataId=" + getDataId() +
'}';
}
// more getters and setters
}
Дочерняя сущность ("много сторон")
package so.lazy;
import javax.persistence.*;
@Entity
public class Child extends Base {
private static final long serialVersionUID = -8798542804002616234L;
@ManyToOne(fetch = FetchType.LAZY)
private Parent parent;
// more fields
public Parent getParent() {
return parent;
}
public void setParent(Parent parent) {
this.parent = parent;
}
// more getters and setters
}
Аннотация Базовый класс
package so.lazy;
import java.io.Serializable;
import java.util.UUID;
import javax.persistence.*;
import org.hibernate.annotations.Type;
@MappedSuperclass
public abstract class Base implements Serializable {
@Id
@Column(name = "data_id")
@Type(type = "pg-uuid")
private java.util.UUID dataId;
public Base() {
dataId = UUID.randomUUID(); // production: com.fasterxml.uuid.generators UUID Type 1
}
public UUID getDataId() {
return dataId;
}
public void setDataId(UUID dataId) {
this.dataId = dataId;
}
}
Когда я использую этот код:
Child child=childrepository.findOne(uuid);
Parent parent=child.getParent();
System.out.println("Parent: " + parent.toString()); // Output A
System.out.println("ID in parent: " + parent.getDataId); // Output B
Выход содержит два совершенно разных UUID для родителя в выходах A и B.
Метод Parent#toString()
дает правильный UUID, получатель дает неправильный UUID.
ПОЧЕМУ ???
Если я переключаюсь на @ManyToOne(fetch = FetchType.EAGER)
для parent
в Child
, он работает нормально.
Мои зависимости:
Пружина 4.3.8
Spring DataJPA 1.11.0
PostgreSQL 9.4-1202-jdbc42