在spring boot中从单个实体创建两个表

时间:2017-12-14 10:12:56

标签: mysql spring-boot

表示我需要跟踪原始表,类似于使用值和已执行的操作记录表

我有像

这样的实体
 @Id
    @GeneratedValue
    private Long _id;
    private String description;
    private BigDecimal price;
    private String imageUrl;

因此无论添加,修改等操作都必须使用值存储在日志表中。

指导我在春季启动时实现这一目标。

1 个答案:

答案 0 :(得分:0)

您可以使用Spring JPA审核来解决此问题。

主要实体类:

@Entity @EntityListeners(MyEntityListener.class)
public class MyEntity {

    @Id
    @GeneratedValue
    private Long _id;
    private String description;
    private BigDecimal price;
    private String imageUrl;
    // Getter Setter
}

审核监听器类:

@Component
public class MyEntityListener {

    @Autowired
    private LogEntryRepositoy logEntryRepositoy;

    @PrePersist
    @PreUpdate
    @PreRemove
    private void beforeAnyOperation(MyEntity myEntity) { 

        LogEntry entry = new LogEntry();
        //Your custom logic
        logEntryRepositoy.save(entry);
    }
}

您的日志实体:

@Entity
public class LogEntry {

    @Id
    @GeneratedValue
    private Long _id;
    private String operation;
    //Add other properties

}

您的日志存储库

@Repository
public interface LogEntryRepositoy extends JpaRepository<LogEntry, Long> {

}

Spring启动应用程序类:

@SpringBootApplication
@EnableJpaRepositories(considerNestedRepositories = true)
@EnableJpaAuditing
public class Application{
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

进一步阅读请遵循此link

GitHub Demo project

如果您使用的是h2以外的任何其他数据库,请在应用程序属性中进行配置。

例如,如果您使用的是MySQL:

spring.jpa.database=mysql
spring.datasource.url=jdbc:mysql://localhost:3306/_your_data_name
spring.datasource.username=your_user_name
spring.datasource.password=your_password

MySQL在pom.xml中的依赖性:

 <dependency>
       <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>6.0.6</version>
    </dependency>