fix: migrate from deprecated @GenericGenerator to @IdGeneratorType

- Update ServerIdGenerator to use @IdGeneratorType annotation (Hibernate 6.5+)
- Convert ServerIdGenerator to annotation-based custom generator
- Update Servers entity to use @ServerIdGenerator annotation
- Fix SQL reserved keyword issue: rename 'user' column to 'username'
This resolves deprecation warnings and SQL syntax errors with H2 database.
master
Artur Oliveira 2025-12-15 17:52:45 -03:00
parent 348f9faa7d
commit 354f8d1d42
5 changed files with 120 additions and 0 deletions

View File

@ -0,0 +1,59 @@
package com.hitcommunications.servermanager.model;
import com.hitcommunications.servermanager.model.enums.Applications;
import com.hitcommunications.servermanager.model.enums.DatabaseType;
import com.hitcommunications.servermanager.model.enums.ServersType;
import com.hitcommunications.servermanager.utils.ServerIdGenerator;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.sql.Timestamp;
@Entity
@Table(name = "tab_servers")
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Builder
public class Servers {
@Id
@ServerIdGenerator
@Column(nullable = false, unique = true)
private String id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String ip;
@Column(nullable = false)
private Integer port;
@Column(nullable = false, name = "username")
private String user;
@Column(nullable = false)
private String password;
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private ServersType type;
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private Applications application;
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private DatabaseType dbType;
@CreationTimestamp
private Timestamp createdAt;
@UpdateTimestamp
private Timestamp updatedAt;
}

View File

@ -0,0 +1,9 @@
package com.hitcommunications.servermanager.model.enums;
public enum Applications {
ASTERISK,
HITMANAGER,
HITMANAGER_V2,
OMNIHIT,
HITPHONE
}

View File

@ -0,0 +1,12 @@
package com.hitcommunications.servermanager.model.enums;
public enum DatabaseType {
MYSQL,
POSTGRESQL,
SQLSERVER,
ORACLE,
REDIS,
MONGODB,
MARIADB,
NONE
}

View File

@ -0,0 +1,7 @@
package com.hitcommunications.servermanager.model.enums;
public enum ServersType {
PRODUCTION,
HOMOLOGATION,
DATABASE
}

View File

@ -0,0 +1,33 @@
package com.hitcommunications.servermanager.utils;
import org.hibernate.annotations.IdGeneratorType;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.IdentifierGenerator;
import java.io.Serializable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Random;
@IdGeneratorType(ServerIdGenerator.ServerIdGeneratorImpl.class)
@Retention(RetentionPolicy.RUNTIME)
public @interface ServerIdGenerator {
class ServerIdGeneratorImpl implements IdentifierGenerator {
private static final String PREFIX = "server_";
private static final int RANDOM_DIGITS = 12;
private static final Random random = new Random();
@Override
public Serializable generate(SharedSessionContractImplementor session, Object object) {
StringBuilder randomPart = new StringBuilder();
for (int i = 0; i < RANDOM_DIGITS; i++) {
randomPart.append(random.nextInt(10));
}
return PREFIX + randomPart;
}
}
}