java - 字符串和枚举类型变量的复合主键
问题描述
这是我的交易实体类
@Entity
@Getter
@Setter
@NoArgsConstructor
public class Transaction{
@Id
private int id;
@NotNull
@Enumerated(EnumType.STRING)
private TransactionSourceEnum source;
@NotNull
@Column(unique = true)
private String transactionId;
private String switchingId;
@JsonFormat(pattern = "yyyy/MM/dd HH:mm:ss")
private LocalDateTime requestDate;
private String status;
}
这是存储库
public interface TransactionRepository extends JpaRepository<Transaction, Integer> {
Transaction findByTransactionIdAndTransactionSource(String transactionId, TransactionSourceEnum transactionSource);
@Modifying(clearAutomatically = true)
@Transactional
@Query(value = "DELETE FROM transaction WHERE transaction_cre_sys_date <= (now() - interval 6 month)",nativeQuery = true)
void deleteSixMonthOldTransactions();
void deleteByTransactionCreSysDateBefore(LocalDateTime date);
Boolean existsByTransactionId(String transactionId);
}
当我尝试用@Id
它注释 transactionSourceEnum 时说
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Composite-id class must implement Serializable: com.adl.et.telco.xlbss.paymentservice.domain.entities.Transaction
如何为代码定义复合主键source
并从代码transactionId
中删除id
变量
解决方案
再创建一个类,然后您可以将其用作主键。为此,您必须使用@EmbeddedId
你的班:
public class Transaction{
@EmbeddedId
private TransactionPK primaryKey;
... other fields, getters and setters
用作主键的新类:
@Embeddable
public class TransactionPK implements Serializable{
// create your own serialVersionUID from your IDE if it asks
private static final long serialVersionUID = 6202269445639364170L;
@NotNull
@Enumerated(EnumType.STRING)
private TransactionSourceEnum source;
@NotNull
@Column(unique = true)
private String transactionId;
...getters and setters
推荐阅读
- python-3.x - Webdriver 对象没有属性“首选项”
- machine-learning - spacy-pytorch-transformers: loss = 0 在训练期间不断
- ios - 如何通过依赖注入使用属性初始化编程 UITableViewCell?
- image-processing - 为什么韦纳滤波器在我的情况下只减少噪音,它并没有减少模糊量
- xml - 机器人框架:如何合并两个 xunit xml 报告文件?
- javascript - 显示加载进度模式不隐藏
- websocket - django 频道的 websocket 握手失败
- javascript - 我可以从渲染开始观察添加的 HTML 吗?
- c# - 更新查询的 ODP .NET 语句超时
- docker - 生成 Kong 客户端凭据时必须使用 HTTPS