2016-07-24 65 views
0

我已經得到了用戶的實體:JPQL在語法一到一個錯誤

@Entity 
@Table 
class User { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer id; 

    @Column 
    private Integer value; 

    @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "user") 
    private UserDetails userDetails = new UserDetails(this); 

    // getters, setters 

} 

的UserDetails實體:

@Entity 
@Table(name = "user_details") 
class UserDetails { 

    @GenericGenerator(name = "generator", strategy = "foreign", 
     parameters = @Parameter(name = "property", value = "user")) 
    @Id 
    @GeneratedValue(generator = "generator") 
    @Column(name = "user_id", unique = true, nullable = false) 
    private Integer id; 

    @Column 
    private String name; 

    @OneToOne 
    @PrimaryKeyJoinColumn 
    private User user; 

    public UserDetails(User user) { 
     setUser(user); 
    } 

    //getters, setters 

} 

而且我有一個UserRepository

public interface UserRepository extends JpaRepository<User, Integer> { 

    @Transactional 
    @Modifying 
    @Query("update User set value = ?2 where userDetails.name = ?1") 
    Integer addValue(String name, int value); 

} 

方法addValue給出下一個錯誤:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'set value=1000 where name='John'' at line 1

我試圖將名稱從UserDetails移動到用戶和它的工作,但我必須保持它在UserDetails。錯誤在哪裏?

回答

0

您正在做的父子實體與子的映射,所以只需將映射更改爲父子。

從用戶刪除的mappedBy並添加它的UserDetails, 所以修改映射樣子如下, 即

@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) 
private UserDetails userDetails = new UserDetails(this); 

@OneToOne(mappedBy = "userDetails") 
@PrimaryKeyJoinColumn 
private User user; 
+0

我不使用'「父」'和「‘孩子’'方面認爲這裏是正確。沒有繼承正在發生。 –

+0

@RamanSahasi你可以試試這個東西,讓我知道。再次讀取異常。 –

+0

不幸的是,它給了我同樣的錯誤。 – Feeco

相關問題