カスケードを持続させると例外がスローされます(MySQLIntegrityConstraintViolationException
)。 私はSpring Data;
を使用してデータを保持しています。キー 'PRIMARY'の重複するエンティティ
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 重複エントリー 'ブルームバーグ' キー 'PRIMARY' の
News.class:
@Entity
public class News implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "company_name")
private Company company;
...
}
Company.class:
@Entity
@Table(name = "company")
public class Company implements Serializable{
@Id
@Column(unique = true,nullable = false)
private String name;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "company",fetch = FetchType.EAGER)
private List<News> newsList;
...
}
私はこのコードを使用して永続化しています:
public void parseDB() throws IOException {
List<News> newsList = new ArrayList<>();
Map<String, Company> companyMap = ((List<Company>) companyRepository.findAll()).stream().collect(Collectors.toMap(Company::getName, company -> company));
newsList.addAll(WebPagesParser.parseCategory("...", "...", companyMap));
newsList.forEach(newsService::create);
}
public static List<News> parseCategory(String url, String category,Map<String,Company> companyMap) throws IOException {
...
Company company;
if (companyMap.containsKey(name)) {
company = companyMap.get(name);
} else {
company = new Company();
company.setName(top.get(1).text());
}
news.setCompany(company);
...
}
そして、それは私に新しい例外を与えた
org.springframework.dao.InvalidDataAccessApiUsageException:独立した永続化するために渡さ エンティティ:com.example.inosmi.database.data.Newsを。永続化するために渡されたデタッチ エンティティ: ネストされた例外はorg.hibernate.PersistentObjectExceptionあるcom.example.inosmi.database.data.News
完了: は私の問題の半分を解決してきた、私はまだドン」それがどこにあるのか分かりませんが、それは働きます。みんな、ありがとう!
すでにデータベースに存在する主キーを持つ行を挿入しようとしています。 –
私はそれをマージしたいが、それはしなかった。 –
あなたのマージ/永続化コードを使用している場合、あなたの質問を表示できますか? – LenglBoy