Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 奇怪和重复的UUID一直在生成_Java_Spring_Hibernate_Duplicates_Uuid - Fatal编程技术网

Java 奇怪和重复的UUID一直在生成

Java 奇怪和重复的UUID一直在生成,java,spring,hibernate,duplicates,uuid,Java,Spring,Hibernate,Duplicates,Uuid,我的Spring Boot应用程序(使用Oracle Java 8、Hibernate和Oracle DB)存在一个恢复问题。 日志中有以下错误: 警告o.h.e.jdbc.spi.SqlExceptionHelper.logExceptions-SQL错误:1,SQLState:23000 错误o.h.e.jdbc.spi.SqlExceptionHelper.logExceptions-ORA-00001:违反了唯一约束(MY_SCHEMA.SYS_C0057302) 此约束(SYSUC00

我的Spring Boot应用程序(使用Oracle Java 8、Hibernate和Oracle DB)存在一个恢复问题。
日志中有以下错误:
警告o.h.e.jdbc.spi.SqlExceptionHelper.logExceptions-SQL错误:1,SQLState:23000
错误o.h.e.jdbc.spi.SqlExceptionHelper.logExceptions-ORA-00001:违反了唯一约束(MY_SCHEMA.SYS_C0057302)

此约束(SYSUC0057302)是唯一的UUID(UUID VARCHAR2(32)非空唯一)

我不能在本地运行它(即使使用负载测试)引发这种行为——在windows上本地运行看起来不错,但在RHEL(部署它的地方)上,问题总是发生

请注意,我还有十几个实体类,它们都有UUID,但只有这个类一直在生成这样奇怪的副本

不知道怎么修。无法找到此问题的根本原因

下面使用的UUID和类的示例:

在开始时有一些普通的UUID,但过了一段时间,就会创建奇怪的重复UUID。在两个不同的RHEL环境上

正常UUID的示例:
0C34561DD75D422CAD652715DF6C6E75
0CB86A03945040B9886752CC07EB116E
0DAA1A3AF2B5438F8CB9489348A92223
0EAE079E621B4D2B8E8BE445F76B14C9
0FCF05797E7E40DE8D3A9D6A3B44AAE1
12DEBCAB53C94285A4C3FF32C5A0BF8E
132A877F404D44069F78D9B74DD4BDC9
1338A8CE09B14552B78CBAD640A3CF29
136310C44374412FB5B1B8FAF7E35330

由UUID.randomUUID()生成的奇怪UUID示例-99%的UUID都是这样的,非常相似,经常出现的数字是3:
3333333 033343333633339
3333333 033343333633336
3333333 03334333363333433330
3333333 03334333363333433332
3333333 03334333363333433333
3333333 03334333363333533330
3333333 03334333363333533333333
3333333 03334333363333533339
3333333 033343333633335333433332
3333333 033343333633332
3333333 033343333633334
3333333 03334333363333733333333
3333333 03334333363333733343335
3333333 03334333363333833333333
3333333 03334333363333333933332

任务实体类:

import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import ----DashboardTaskDto;
import ----SimpleUserDto;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.UUID;

@Getter
@Setter
@NoArgsConstructor
@Entity
@Table(name = "TASK")
@ToString
@EntityListeners(AuditingEntityListener.class)
@Slf4j
class TaskEntity {

    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "TASK_SEQ")
    @SequenceGenerator(sequenceName = "TASK_SEQ", allocationSize = 1, name = "TASK_SEQ")
    @Id
    private Long id;

    @Column(name = "KKF")
    private String kkf;

    @EqualsAndHashCode.Include
    private UUID uuid = UUID.randomUUID();

    private String customerName;
    private String assignedUserName;
    private String assignedUserRole;
    private int dpd;
    private Boolean bgk;
    private String courtProceedings;
    private String name;
    private LocalDateTime dueDate;
    private LocalDateTime doneDate;
    private BigDecimal totalLiabilities;
    private Long issueActivityId;
    private String userId;

    @Enumerated(EnumType.STRING)
    private TaskStatus status;

    @CreatedDate
    private LocalDateTime created;

    @LastModifiedDate
    private LocalDateTime modified;

    @Builder
    public TaskEntity(String kkf, String customerName, String assignedUserName, String assignedUserRole, int dpd, Boolean bgk, String courtProceedings, String name, LocalDateTime dueDate, LocalDateTime doneDate, BigDecimal totalLiabilities, Long issueActivityId, String userId, TaskStatus status, LocalDateTime created, LocalDateTime modified) {
        this.kkf = kkf;
        this.customerName = customerName;
        this.assignedUserName = assignedUserName;
        this.assignedUserRole = assignedUserRole;
        this.dpd = dpd;
        this.bgk = bgk;
        this.courtProceedings = courtProceedings;
        this.name = name;
        this.dueDate = dueDate;
        this.doneDate = doneDate;
        this.totalLiabilities = totalLiabilities;
        this.issueActivityId = issueActivityId;
        this.userId = userId;
        this.status = status;
        this.created = created;
        this.modified = modified;
    }
任务存储库类:

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.repository.Repository;
import org.springframework.lang.Nullable;

import java.util.Optional;

interface TaskRepository extends Repository<TaskEntity, Long> {
    TaskEntity save(TaskEntity from);

    Optional<TaskEntity> findByIssueActivityId(Long id);

    Page<TaskEntity> findAll(@Nullable Specification<TaskEntity> spec, Pageable pageable);
}

更新1:

我尝试设置-Djava.security.egd=file:/dev//uradom,但这根本没有帮助

这些UUID甚至不像有效的v4。。。看起来好像还有别的事情在发生。因为java不应该使用这种方法生成这样的ID v3。这些UUID甚至不像有效的v4。。。看起来好像还有别的事情在发生。因为java不应该能够使用此方法生成这样的ID v3。
class TaskCreator {
   public TaskEntity from(IssueActivityEntity issueActivityEntity) {
       IssueEntity issue = issueActivityEntity.getIssue();
       CustomerEntity customer = issue.getCustomer();
       UserEntity user = issueActivityEntity.getUser();
       return TaskEntity.builder()
           .kkf(customer.getKkf())
           .customerName(customer.getCompanyName())
           .assignedUserName(user.getName())
           .assignedUserRole(user.getRole())
           .dpd(issue.retrieveMaxDpd())
           .bgk(customer.isBgk())
           .courtProceedings(customer.getCourtProceedings())
           .name(issueActivityEntity.getActivity().getStatus())
           .dueDate(issueActivityEntity.getDueDate())
           .doneDate(issueActivityEntity.getDoneDate())
           .totalLiabilities(customer.getTotalLiabilities())
           .issueActivityId(issueActivityEntity.getId())
           .status(issueActivityEntity.getStatus())
           .userId(user.getId())
           .build();
   }

   TaskEntity updateFrom(final TaskEntity task, final IssueActivityEntity ia) {
       IssueEntity issue = ia.getIssue();
       CustomerEntity customer = issue.getCustomer();
       UserEntity user = ia.getUser();
       task.setKkf(customer.getKkf());
       task.setCustomerName(customer.getCompanyName());
       task.setAssignedUserRole(user.getRole());
       task.setDpd(issue.retrieveMaxDpd());
       task.setBgk(customer.isBgk());
       task.setCourtProceedings(customer.getCourtProceedings());
       task.setName(ia.getActivity().getStatus());
       task.setDueDate(ia.getDueDate());
       task.setDoneDate(ia.getDoneDate());
       task.setTotalLiabilities(customer.getTotalLiabilities());
       task.setIssueActivityId(ia.getId());
       task.setStatus(ia.getStatus());
       task.setUserId(user.getId());
       return task;
   }
}