2016-03-10 20 views
6

Vì vậy, thao tác này đã hoạt động trước khi tôi chuyển sang Khởi động. Về cơ bản tôi đã có thể POST một text/uri-list tới một tài nguyên @OneToMany tốt. Tôi đã chuyển dự án của mình để sử dụng Boot và một nơi nào đó trong quá trình nó ngừng hoạt động. Tôi có thể PUT một văn bản/uri-list ở cuối @ManyToOne, nhưng đó không phải là những gì tôi muốn làm.Khôi phục dữ liệu khởi động mùa xuân POST trả về 204 nhưng chỉ SELECTS

Khi tôi gửi POST, tôi nhận được phản hồi 204, nhưng tôi có thể thấy SQL trên bảng điều khiển của mình chỉ Chọn và không chèn bất kỳ thứ gì. EDIT: tôi sử dụng Postman, nhưng đây là một lệnh curl mà không/trả về cùng

curl -v -X POST -H "Content-Type: text/uri-list" -d "http://localhost:8080/games/2" http://localhost:8080/developers/1/gameList 

Và logger trên IDEA:

Hibernate: select developer0_.developer_id as develope1_1_0_, developer0_.name as name2_1_0_ from developer developer0_ where developer0_.developer_id=? 
Hibernate: select game0_.game_id as game_id1_6_0_, game0_.developer_id as develope5_6_0_, game0_.esrb_rating as esrb_rat2_6_0_, game0_.name as name3_6_0_, game0_.release_date as release_4_6_0_, developer1_.developer_id as develope1_1_1_, developer1_.name as name2_1_1_ from game game0_ left outer join developer developer1_ on game0_.developer_id=developer1_.developer_id where game0_.game_id=? 

Dưới đây là lớp học có liên quan của tôi:

@Entity 
public class Developer { 
    @Id 
    @GeneratedValue 
    @Column(name = "developerId") 
    private Long id; 

    private String name; 

    @OneToMany(mappedBy = "developer", cascade = CascadeType.ALL) 
    private List<Game> gameList; 

Loại khác:

@Entity 
public class Game { 
    @Id 
    @GeneratedValue 
    @Column(name = "gameId") 
    private Long id; 

    private String name; 

    private Date releaseDate; 

    private ESRBRating esrbRating; 

    @ManyToMany(mappedBy = "gameList", cascade = CascadeType.ALL) 
    private List<User> userList; 

    @ManyToOne 
    @JoinColumn(name = "developerId") 
    private Developer developer; 

Nếu tôi thiếu bất kỳ thông tin liên quan nào khác, hãy cho tôi biết và tôi sẽ cung cấp.

+1

Bạn có thể thêm mã cần chèn không? –

+0

Bạn đã giải quyết được sự cố chưa? Tôi chỉ đang đối phó với cùng một vấn đề chính xác và câu trả lời hiện tại không hữu ích. – Smajl

Trả lời

1

Hibernate thu thập chèn, cập nhật và xóa cho đến khi trình quản lý thực thể bị xóa. Việc này thường được thực hiện vào cuối giao dịch. Vì vậy, có thể quản lý giao dịch của bạn không hoạt động chính xác.

Đặt nhật ký cho org.springframework.transaction để gỡ lỗi, hơn bạn sẽ thấy khi giao dịch được mở và đóng.

+0

Đã thêm 'logging.level.org.springframework.transaction = debug' vào ứng dụng của tôi.các thuộc tính và tôi thấy nhiều thông tin hơn về việc sửa đổi, thả và tạo bảng Hibernate. Nhưng đầu ra cho POST là như nhau, chỉ chọn. Giống như tôi đã nói, việc đăng trên điểm cuối khác hoạt động tốt và tôi thấy chèn trong nhật ký, không có gì khác theo cách khác. – jam01

2

Nếu bạn muốn giữ nó bi-directional bạn dường như có 2 lựa chọn:

  • Tháo mappedBy = "developer" và để cho JPA sử dụng một jointable để quản lý các mối quan hệ một-nhiều.

Nhà phát triển:

@OneToMany(cascade = CascadeType.ALL) 
@JoinTable(
     name="DeveloperGame", 
     joinColumns = @JoinColumn(name="dev_id"), 
     inverseJoinColumns = @JoinColumn(name="game_id") 
) 
private List<Game> gameList; 

Trò chơi:

@ManyToOne 
@JoinTable(
     name="DeveloperGame", 
     joinColumns = @JoinColumn(name="game_id"), 
     inverseJoinColumns = @JoinColumn(name="dev_id") 
) 
private Developer developer; 
  • Tháo mappedBy = "developer" và thêm một @JoinColumn nếu bạn không muốn sử dụng một jointable (làm cho bạn có một joincolumn trên cả hai bên của mối quan hệ có cùng tên cột

Nhà phát triển:

@OneToMany(cascade = CascadeType.ALL) 
@JoinColumn(name = "devId") 
private List<Game> gameList; 

Trò chơi:

@ManyToOne 
@JoinColumn(name = "devId") 
private Developer developer; 

Tôi tự hỏi nếu điều này là do thiết kế hoặc nếu điều này là một lỗi trong mùa xuân dữ liệu REST.

+0

Đã làm việc này chưa. Tôi gặp vấn đề tương tự khi tham gia hai bảng. Nhưng giải pháp ở đây có vẻ giống hệt với việc triển khai của tôi. – Amit

Các vấn đề liên quan