に私はこのようなエンティティの調査があります。このようなSurveyDataResults外しエンティティ:一から一関係
@Entity
public class SurveyData {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "SURVEY_ID")
private Long Id;
@ManyToOne
@JsonBackReference
@JoinColumn(name = "client_id")
public Client client;
@OneToOne
@JsonManagedReference
@JoinColumn(name = "surveyresult_id")
private SurveyDataResults surveyDataResults;
private Character unit;
..and other fields
、別のエンティティ:
@Entity
@Table(name = "surveydataresults")
public class SurveyDataResults {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "SURVEYRESULT_ID")
private Long Id;
..and other fields
がSurveyDataがPOSTから充填ますフォームを作成して保存した後、これらのフィールドで計算された後、SurveyDataResultに保存されます。 初めてフォームを送信すると、SurveyDataに保存され、最初のSurveyDataResultsへの参照が保持されます。すべての結果があるIDは1です。 2回目のフォームに値を記入すると、エラーが発生します。分離されたエンティティがpersistに渡されました:SurveyDataResults
私が見ている問題は、次々にフォームに記入すると、提出された2番目のフォームはID = 1のSurveyDataResultsに保存されます。したがって、すでに1回保存されているため、分離されたエンティティが発行されます。 それに応じて、すべてのフォーム提出後にマッピングを作成するにはどうすればよいですか?
EDIT:
マイポストコントローラー:
@RequestMapping(value = "/user/calculate", method = RequestMethod.POST)
public ModelAndView createNewSurvey(@Valid SurveyData survey_data, BindingResult bindingResult) {
long clientId = survey_data.client.getId();
SurveyData newSurvey = surveyService.saveSurvey(survey_data);
Long surveyId = newSurvey.getId();
calculateService.CalculateFirst(surveyId);
calculateService.CalculateSecond(surveyId);
calculateService.CalculateThird(surveyId);
=
return new ModelAndView("redirect:/user/surveys?getId=" + clientId);
}
そして、私はこのように.SAVE使用してすべてのフィールドを保存calculateService中: surveyServiceResults.saveSurveyResults(surveyresults)。
@Service("calculateService")
public class CalculateServiceImpl implements CalculateService {
@Autowired
private SurveyDataRepository surveyDataRepository;
SurveyDataResults surveyresults = new SurveyDataResults();
@Autowired
private SurveyServiceResults surveyServiceResults;
public void CalculateFirst(Long id){
SurveyData survey = surveyDataRepository.findOne(id);
Integer c=survey.getA()+survey.getB();
surveyResults.setC(c);
surveyServiceResults.saveSurveyResults(surveyresults);
}
public void CalculateSecond(Long id){
SurveyData survey = surveyDataRepository.findOne(id);
Integer D=survey.getB()+survey.getM();
surveyResults.setD(D);
surveyServiceResults.saveSurveyResults(surveyresults);
}
サービス:
public interface SurveyServiceResults {
public void saveSurveyResults(SurveyDataResults surveyresults);
}
実装:
@Service("surveyServiceResults")
パブリッククラスSurveyServiceResultsImplが実装SurveyServiceResults {
@Autowired
private SurveyDataResultsRepository surveyDataResultsRepository;
@Override
public void saveSurveyResults(SurveyDataResults surveyresults) {
surveyDataResultsRepository.save(surveyresults);
}
}
リポジトリ:
@Repository("surveyDataResults")
public interface SurveyDataResultsRepository extends
JpaRepository<SurveyDataResults, Long>{}
これは私が取得エラーです:
detached entity passed to persist: com.test.test1.model.SurveyDataResults; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: com.test.test1.model.SurveyDataResults
私はコードで説明していますか? – pleft
私は投稿を編集しました。ありがとうございました – MonnIca
'surveyService.saveSurvey'メソッドと' calculateService.CalculateFirst'、 'calculateService.CalculateSecond'、' calculateService.CalculateThird'メソッドも投稿してください。できるだけ多くの情報を提供してください。また、 'detached entities passed to persist:SurveyDataResults'だけでなく、完全なエラースタックトレースを投稿するのを忘れないでください。 – pleft