当前位置: 首页 > 知识库问答 >
问题:

JPA ManyTone存在存储库保存问题

杭志泽
2023-03-14

我有以下课程:

DBEntity.java

@MappedSuperclass
public class DBEntity implements Persistable<Long>, Serializable, Comparable<DBEntity> {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(
            strategy = GenerationType.SEQUENCE,
            generator = "default_generator"
    )
    private Long id;

    @ManyToOne()
    @JoinColumn(
            name = "created_by",
            referencedColumnName = "id",
            insertable = false,
            updatable = false,
            foreignKey = @ForeignKey(
                    name = "created_by_user_id_fk"
            )
    )
    private User createdBy;

    @Column(
            name = "created_on",
            nullable = false,
            columnDefinition = "TIMESTAMP WITHOUT TIME ZONE"
    )
    private Date createdOn;
    //shortened 
}

使用者JAVA

@Entity(name = "User")
@Table(
        name = "\"user\"",
        uniqueConstraints = {
                @UniqueConstraint(name = "user_username_unique", columnNames = "username")
        }
)
@SequenceGenerator(
        name = "default_generator",
        sequenceName = "user_role_sequence",
        allocationSize = 1
)
public class User extends DBEntity {

    @Column(
            name = "username",
            nullable = false,
            columnDefinition = "TEXT"
    )
    private String username;
    //shortened 
}

用户服务。JAVA

public class UserService {

    @Autowired
    private UserRepository userRepository;
    public User saveUser(User user) {
        if (user.isNew()) {
            user.setCreatedOn(new Date());
            user.setCreatedBy(getAuthenticatedUser());
        } else {
            user.setUpdatedOn(new Date());
            user.setUpdatedBy(getAuthenticatedUser());
        }

        return userRepository.save(user);
    }

    private User getAuthenticatedUser() {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        return userRepository.findFirstByUsername(auth.getName());
    }
}

UserRepository.java

public interface UserRepository extends AbstractRepository<User, Long> {}

共有1个答案

唐康安
2023-03-14

发现了问题。序列生成器与测试数据冲突,所以它试图给新用户一个已经在数据库中的id

 类似资料:
  • 我有一个数据已经保存在我的数据库基于我的存储库和服务。我想保存另一个数据与邮递员只改变播放器id。但它不是创建一个新的实体数据。它更新现有的实体数据。我的问题是如何更新一个数据由我的服务当它找到一个现有的id。但当它找到一个新的id将保存一个新的数据到数据库。 这是我的回购: 这是我的服务:

  • 我需要从消费者内部访问saga存储库,以读取与正在消费的消息相关的saga的当前状态。 场景:我有一个外部服务,当这个服务使用来自传奇的事件时,我想看看传奇是否仍然处于正确的状态,因为如果同时传奇改变了状态,消费者必须跳过事件。 如何:我当然可以通过使用它的本机框架来查询选择的saga存储库实现,但是我想使用一个抽象,一个接口,从消费者内部加载saga状态,以便将来能够切换到不同的存储库实现。 感

  • 我使用JPA存储库将简单的数据对象保存到数据库中。为了避免重复,我在多个字段上创建了一个唯一约束。如果现在根据唯一字段/约束保存一个副本,我想捕获异常,记录对象,应用程序应继续并保存下一个对象。但在这里我总是会遇到这样的异常:“org.hibernate.AssertionFailure:de.test.PeopleDBO条目中的空id(在异常发生后不要刷新会话)”。 一般来说,我知道hibern

  • 我在使用spring存储库和服务的代码中遇到了这个问题,在我的spring项目中,它不适用于用户和角色,这是他们的服务和存储库的问题: 这是用户实现存储库: 这是用户的存储库和服务: 用户服务 试图消除空白,但这是同样的问题,我搜索了很多关于它,但没有找到任何解决方案。

  • mvn-x编译命令的输出 Apache Maven 3.0.4(R1232337;2012-01-17 14:14:56+0530)Maven Home:C:\java\apache-maven-3.0.4\bin.Java版本:1.6.0_37,供应商:Sun Microsystems Inc.Java Home:C:\程序文件\Java\JDK1.6.0_37\JRE默认区域设置:en_IN,