diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/BaseSqlEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/BaseSqlEntity.java index 084df4455c..ae131ae300 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/model/BaseSqlEntity.java +++ b/dao/src/main/java/org/thingsboard/server/dao/model/BaseSqlEntity.java @@ -21,12 +21,14 @@ import jakarta.persistence.Id; import jakarta.persistence.MappedSuperclass; import lombok.Data; import org.apache.commons.lang3.StringUtils; +import org.hibernate.annotations.UuidGenerator; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.BaseData; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.UUIDBased; import org.thingsboard.server.dao.DaoUtil; +import org.thingsboard.server.dao.sql.IdGenerator; import java.util.Arrays; import java.util.Collections; @@ -44,6 +46,7 @@ public abstract class BaseSqlEntity implements BaseEntity { @Id @Column(name = ModelConstants.ID_PROPERTY, columnDefinition = "uuid") + @UuidGenerator(style = UuidGenerator.Style.AUTO, algorithm = IdGenerator.class) protected UUID id; @Column(name = ModelConstants.CREATED_TIME_PROPERTY, updatable = false) diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/IdGenerator.java b/dao/src/main/java/org/thingsboard/server/dao/sql/IdGenerator.java new file mode 100644 index 0000000000..b0ca2c1530 --- /dev/null +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/IdGenerator.java @@ -0,0 +1,33 @@ +/** + * Copyright © 2016-2025 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.dao.sql; + +import com.datastax.oss.driver.api.core.uuid.Uuids; +import lombok.extern.slf4j.Slf4j; +import org.hibernate.engine.spi.SharedSessionContractImplementor; +import org.hibernate.id.uuid.UuidValueGenerator; + +import java.util.UUID; + +@Slf4j +public class IdGenerator implements UuidValueGenerator { + + @Override + public UUID generateUuid(SharedSessionContractImplementor session) { + return Uuids.timeBased(); + } + +} diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/JpaAbstractDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/JpaAbstractDao.java index 6f0380752f..4a81bc38a9 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/JpaAbstractDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/JpaAbstractDao.java @@ -15,7 +15,6 @@ */ package org.thingsboard.server.dao.sql; -import com.datastax.oss.driver.api.core.uuid.Uuids; import com.google.common.collect.Lists; import com.google.common.util.concurrent.ListenableFuture; import jakarta.persistence.EntityManager; @@ -69,9 +68,7 @@ public abstract class JpaAbstractDao, D> log.debug("Saving entity {}", entity); boolean isNew = entity.getUuid() == null; if (isNew) { - UUID uuid = Uuids.timeBased(); - entity.setUuid(uuid); - entity.setCreatedTime(Uuids.unixTimestamp(uuid)); + entity.setCreatedTime(System.currentTimeMillis()); } try { entity = doSave(entity, isNew, flush);