Followed this question but did not work
有两个实体Account和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,如顶部的stackoverflow帖子中所指定的那样
{
"transactionId" : "3213435454342",
"transactionAmount" : 5.99,
"transactionStatus" : true,
"statusMessage" : null,
"timestamp" : "2017-03-09T05:11:41.000+0000",
"accountNumber" : "http://localhost:8080/accounts/90188977"
}
当我尝试使用上面的json执行POST
时我得到了
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)
如何保存与Spring数据有关系的实体????
答案 0 :(得分:1)
问题是,对于@JoinColumn(name = "accountNumber")
,您会将数据库中的列名称硬编码为accountNumber
。通常,命名策略会添加嵌入式下划线,而不是具有混合大小写列名称。
因此,如果您将行更改为@JoinColumn(name = "account_number")
。