2017-03-09 97 views
0

Followed this question but did not work春数据休息与JPA关系

有两个实体的帐户,并UserTransaction的

Account.java

@Entity 
@Access(AccessType.FIELD) 
public class Account { 

    @Id 
    private Integer accountNumber; 
    private String holderName; 
    private String mobileNumber; 
    private Double balanceInformation; 


    public Account(Integer accountNumber, String holderName, String mobileNumber, Double balanceInformation) { 
     this.accountNumber = accountNumber; 
     this.holderName = holderName; 
     this.mobileNumber = mobileNumber; 
     this.balanceInformation = balanceInformation; 
    } 
} 

UserTransaction.java

@Entity 
@Access(AccessType.FIELD) 
@Table(name = "user_transaction") 
public class Transaction { 

    @Id 
    private Long transactionId; 
    @ManyToOne 
    @JoinColumn(name = "accountNumber") 
    private Account accountNumber; 
    private Double transactionAmount; 

    @Column(nullable = false, columnDefinition = "TINYINT", length = 1) 
    private Boolean transactionStatus; 

    private String statusMessage; 

    @Temporal(TemporalType.TIMESTAMP) 
    @Column(name="timestamp", columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP") 
    private Date timestamp; 

    public Transaction(Long transactionId, Account account, 
         Double transactionAmount, 
         Boolean transactionStatus, 
         String statusMessage) { 
     this.transactionId = transactionId; 
     this.accountNumber = account; 
     this.transactionAmount = transactionAmount; 
     this.transactionStatus = transactionStatus; 
     this.statusMessage = statusMessage; 
    } 
} 

和我TransactionRepository如下:

@RepositoryRestResource(collectionResourceRel = "transactions", path = "transactions") 
public interface JpaTransactionRepository extends JpaRepository<Transaction, Long>, TransactionRepository { 

    @Query(value = "select t from Transaction t where t.accountNumber.accountNumber = :accountNumber") 
    Iterable<Transaction> findByAccountNumber(@Param("accountNumber") Integer accountNumber); 

} 

我已经建立了一个JSON作为顶部

{ 
     "transactionId" : "3213435454342", 
     "transactionAmount" : 5.99, 
     "transactionStatus" : true, 
     "statusMessage" : null, 
     "timestamp" : "2017-03-09T05:11:41.000+0000", 
     "accountNumber" : "http://localhost:8080/accounts/90188977" 
} 

在计算器后指定的,当我尝试上述JSON我得到

Caused by: java.sql.SQLIntegrityConstraintViolationException: Column 'account_number' cannot be null 
     at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:533) 
     at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:513) 
     at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:115) 
     at com.mysql.cj.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:1983) 

如何保存执行POST一个与Spring数据有关系的实体

回答

1

问题是,在@JoinColumn(name = "accountNumber")中,您会将数据库中的列名硬编码为accountNumber。通常,命名策略会添加嵌入的下划线,而不是混合大小写的列名称。 所以它应该工作,如果你将行更改为@JoinColumn(name = "account_number")