如果當天是當天的新創建表,我想每天創建一個以完整日期作為表名的新表
我已經看到,當我將 @Table(name="") 名稱更改為新字串時,它會創建一個新表,但我無法自動執行此作業
@Entity
@Table(name="orders_25_10_2021")
public class game2data {
@Id
private int cid;
private String name;
private Integer address;
private Integer gender;
private String date;
private String Done;
簡單來說,我想根據日期將@Table(name="") 的名稱作為動態變數傳遞。
uj5u.com熱心網友回復:
您可以通過擴展 SpringPhysicalNamingStrategy 并覆寫其 toPhysicalTableName 方法來實作此自定義命名策略:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
import org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TableNamingStrategy extends SpringPhysicalNamingStrategy {
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("dd_MM_YYYY");
public static final PhysicalNamingStrategyStandardImpl INSTANCE =
new PhysicalNamingStrategyStandardImpl();
@Override
public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) {
if (!name.getText().equals("game2data"))
return name;
StringBuilder customName =
new StringBuilder("orders").append('_').append(DATE_FORMATTER.format(LocalDate.now()));
return new Identifier(customName.toString(), name.isQuoted());
}
}
并將其注冊到您的application.properties:
spring.jpa.hibernate.naming.physical-strategy=com.stackoverflow.questions.TableNamingStrategy
并@Table從 game2data 物體中洗掉注釋。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/339857.html
上一篇:找不到類org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor一對一映射hibernate的序列化程式
