2017-01-05 18 views
0

jpaフレームワークを使用してデータベースに接続するjavaアプリケーションがあります。 オブジェクトUserInformationAdditionDataオブジェクトが含まれていると、userInformationRepository.findByUserId(id)エラーが発生します。データベースからデータをロードするときにStackOverflowErrorが発生しました

>java.lang.StackOverflowError: null 
Method threw 'java.lang.StackOverflowError' exception. Cannot evaluate com.entity.UserInformation.toString() 


java.lang.StackOverflowError: null 
    at javax.servlet.ServletResponseWrapper.getBufferSize(ServletResponseWrapper.java:167) ~[tomcat-embed-core-8.5.6.jar:8.5.6] 
    at javax.servlet.ServletResponseWrapper.getBufferSize(ServletResponseWrapper.java:167) ~[tomcat-embed-core-8.5.6.jar:8.5.6] 
    at org.springframework.security.web.util.OnCommittedResponseWrapper.checkContentLength(OnCommittedResponseWrapper.java:232) ~[spring-security-web-4.1.3.RELEASE.jar:4.1.3.RELEASE] 
    at org.springframework.security.web.util.OnCommittedResponseWrapper.access$200(OnCommittedResponseWrapper.java:33) ~[spring-security-web-4.1.3.RELEASE.jar:4.1.3.RELEASE] 
    at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.write(OnCommittedResponseWrapper.java:637) ~[spring-security-web-4.1.3.RELEASE.jar:4.1.3.RELEASE] 
    at com.fasterxml.jackson.core.json.UTF8JsonGenerator._flushBuffer(UTF8JsonGenerator.java:2033) ~[jackson-core-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.core.json.UTF8JsonGenerator.writeRaw(UTF8JsonGenerator.java:632) ~[jackson-core-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.core.json.UTF8JsonGenerator.writeRaw(UTF8JsonGenerator.java:555) ~[jackson-core-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.core.json.UTF8JsonGenerator.writeNumber(UTF8JsonGenerator.java:931) ~[jackson-core-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.std.NumberSerializers$FloatSerializer.serialize(NumberSerializers.java:194) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:704) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:690) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:704) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:690) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:704) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:690) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:704) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:690) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:704) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:690) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:704) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:690) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:704) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:690) ~[jackson-databind-2.8.4.jar:2.8.4] 
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.8.4.jar:2.8.4] 

ユーザ情報エンティティ

@Data 
@Entity(name = "user_information") 
public class UserInformation { 
    @Id 
    @Column(name = "uuid") 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    @Column(name = "user_id") 
    private Long userId; 
    @Column(name = "title", length = 64) 
    private String title; 
    @Column(name = "message", length = 128) 
    private String message; 
    @OneToOne(mappedBy = "userInformation") 
    private AdditionData additionData; 
} 

AdditionDataエンティティ

:応答で は、私は多くの内側のオブジェクト

userInformation->additionData->userInformation->userInformation->additionData->userInformation->.... 

例外でJSONを見ます

リポジトリエンティティUserInformationため

@Repository 
public interface UserInformationRepository extends CrudRepository<UserInformation, Long> { 
    List<UserInformation> findByIdIn(List<Long> ids); 
    UserInformation findByUserId(Long userId); 
} 

は、エラーが発生したのはなぜ?エンティティ内の関係の設定にエラーがありますか?

+1

これらのエンティティで 'toString()'メソッドをオーバーライドしましたか? –

答えて

3

一般的にジャンクションJSONは、循環リンクに関する問題にシリアル化されています。あなたの2つの実体の間のように(UserInformationAdditionDataに同じUserInformationなどを持っています)。

@JsonIgnoreを追加してサイクルを停止します。良い測定のために、toString()が呼び出されたときに問題を防ぐために、あなたのロンボク@Data注釈に除外を追加します。

@JsonIgnoreを使用すると、出力がJSONとして生成されたときにSpringのJackson JSONシリアライザが参照を実行しなくなります。そのプロセスは再帰的です(メンバはjsonにもシリアライズされています)。これらの参照へのダイビングは、StackOverflowExceptionがスローされることを防ぎます。

+0

答えがありがとう、 '@ Data'を削除して' @ Getter' '@ Setter'アノテーションを追加しましたが、問題は解決しませんが、なぜですか? '@JsonIgnore'では完全に動作します。 –

+0

いくつかの詳細を追加して、私の答えをいくらか明確にすることを願っています。 – CollinD

+0

ありがとう、あなたは本当に私を助けた! –

関連する問題