I want to start a relationship but I get an error that I can't understand.
Person.java
@Entity
@Getter
@Setter
@RequiredArgsConstructor
public class Personal implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String personName;
private String personLastName;
// comment old block
// @OneToOne(cascade = CascadeType.ALL)
// private Address Address;
// add
@OneToOne(cascade = CascadeType.ALL, mappedBy = "person")
private Address address;
}
Address.java
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class Address implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "Street")
private String street;
@Column(name = "Alley")
private String alley;
@Column(name = "District")
private String district;
// comment old block
// @OneToOne(mappedBy = "Address")
// private Person person;
// add
@JoinColumn(name = "id")
@OneToOne(fetch = FetchType.EAGER)
@MapsId
private Person person;
public Adres(String street, String alley, String district, Person person) {
this.street = street;
this.alley = alley;
this.district = district;
this.person = person;
}
}
My Repository
public String createUser(){
Person p1 = new Person();
p1.setId(p1.getId());
p1.setPersonName("testPerson");
p1.setPersonLastName("testPerson");
p1.setAddress(new Address("test","test","test",p1)); // ad person on address constructor
personRepository.save(p1);
return "Save is successful";
}
AddressService.java
@Service
@RequiredArgsConstructor
public class AdresServices {
private final AddressRepository addressRepository;
public Optional<Address> getAddress(Integer id){
return addressRepository.findById(id);
}
}
I want to see "person" using address 1. but I get error. When I do mappedBy the program gives an error.
I am successfully saving to the database.
BUT! When I try to bring a member through the address table, or rather when I activate the use of @OneToOne(mappedBy = "x"), my program starts to give an error.
ERROR :
java.lang.StackOverflowError: null
at java.base/java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1012) ~[na:na]
at java.base/java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1541) ~[na:na]
at java.base/java.lang.ClassLoader.getClassLoadingLock(ClassLoader.java:667) ~[na:na]
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:591) ~[na:na]
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774) ~[jackson-databind-2.13.4.2.jar:2.13.4.2]
However, I still have the same problem! :) nothing has changed. the record to the database is successful, but it continues to give the same error when I want to retrieve the data