Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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
可以为共享类定义Spring存储库吗?_Spring_Spring Boot_Spring Data Jpa - Fatal编程技术网

可以为共享类定义Spring存储库吗?

可以为共享类定义Spring存储库吗?,spring,spring-boot,spring-data-jpa,Spring,Spring Boot,Spring Data Jpa,我有一个类User,在服务器和android客户端之间共享。所以我不想用@id注释来注释这个类 在spring jpa中处理这个问题的最佳方法是什么?我认为最简单的方法是回退到xml映射,这样您的域对象将保持纯净 SpringBoot会注意到您正在使用这种类型的映射,并在开箱即用的情况下为您配置hibernate 下面是一个简单的例子: package com.stackoverflow.so45264894; import org.springframework.boot.CommandLi

我有一个类
User
,在服务器和android客户端之间共享。所以我不想用
@id
注释来注释这个类


在spring jpa中处理这个问题的最佳方法是什么?

我认为最简单的方法是回退到
xml
映射,这样您的域对象将保持纯净

SpringBoot会注意到您正在使用这种类型的映射,并在开箱即用的情况下为您配置hibernate

下面是一个简单的例子:

package com.stackoverflow.so45264894;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.data.repository.CrudRepository;

@SpringBootApplication
@EnableJpaRepositories
public class So45264894Application {

    public static void main(String[] args) {
        SpringApplication.run(So45264894Application.class, args);
    }

    public static class User {
        private Long   id;
        private String username;

        public Long getId() { return id; }
        public void setId(Long id) { this.id = id; }

        public String getUsername() { return username; }
        public void setUsername(String username) { this.username = username; }
    }

    @Bean
    CommandLineRunner run(UserRepository userRepository) {
        final User user = new User();
        user.setUsername("admin");
        return args -> userRepository.save(user);
    }
}

interface UserRepository extends CrudRepository<So45264894Application.User, Long> {
}
输出:

Hibernate: drop table users if exists
Hibernate: create table users (user_id integer generated by default as identity, username varchar(255), primary key (user_id))
Hibernate: alter table users add constraint UK_r43af9ap4edm43mmtq01oddj6 unique (username)
Hibernate: insert into users (username, user_id) values (?, ?) // <- this is userRepository.save() call
Hibernate:删除表用户(如果存在)
Hibernate:创建表用户(默认情况下生成的用户id整数为identity、用户名varchar(255)、主键(用户id))
Hibernate:alter table users添加约束UK_R43AF9AP4EDM43MMTQ1ODDJ6 unique(用户名)

Hibernate:在用户(用户名、用户id)中插入值(?,)/我认为最简单的方法是回退到
xml
映射,这样您的域对象将保持纯净

SpringBoot会注意到您正在使用这种类型的映射,并在开箱即用的情况下为您配置hibernate

下面是一个简单的例子:

package com.stackoverflow.so45264894;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.data.repository.CrudRepository;

@SpringBootApplication
@EnableJpaRepositories
public class So45264894Application {

    public static void main(String[] args) {
        SpringApplication.run(So45264894Application.class, args);
    }

    public static class User {
        private Long   id;
        private String username;

        public Long getId() { return id; }
        public void setId(Long id) { this.id = id; }

        public String getUsername() { return username; }
        public void setUsername(String username) { this.username = username; }
    }

    @Bean
    CommandLineRunner run(UserRepository userRepository) {
        final User user = new User();
        user.setUsername("admin");
        return args -> userRepository.save(user);
    }
}

interface UserRepository extends CrudRepository<So45264894Application.User, Long> {
}
输出:

Hibernate: drop table users if exists
Hibernate: create table users (user_id integer generated by default as identity, username varchar(255), primary key (user_id))
Hibernate: alter table users add constraint UK_r43af9ap4edm43mmtq01oddj6 unique (username)
Hibernate: insert into users (username, user_id) values (?, ?) // <- this is userRepository.save() call
Hibernate:删除表用户(如果存在)
Hibernate:创建表用户(默认情况下生成的用户id整数为identity、用户名varchar(255)、主键(用户id))
Hibernate:alter table users添加约束UK_R43AF9AP4EDM43MMTQ1ODDJ6 unique(用户名)

Hibernate:在用户(用户名、用户id)中插入值(?,)//如果用户是实体类,则无论客户端如何,它都应该具有id,因为它不是一个值对象,而是一个可持久化的实体。共享实体可能不是一个好主意:它们映射数据库,客户端不应该关心这一点。但是加载带有不在类路径中的注释的类不会导致任何问题,因此如果您真的想,可以。@Barath它有一个Id,但我不想注释it@JBNizet你完全正确,这是个坏主意。但我正在将一个遗留应用程序转换为spring boot,需要在重构之前让它正常工作。;-)我没有想到注释会无关紧要。@n3utrino那么在这种情况下,用
@NoRepositoryBean
注释定义一个存储库,该注释不会被JpaRepositories获取,并提供实现jparepository的存储库类。但这很难。如果用户是一个实体类,那么不管客户端是什么,它都应该有一个id,因为它不是一个值对象,而是一个可持久化的实体。共享实体可能不是一个好主意:它们映射您的数据库,客户端不应该关心这一点。但是加载带有不在类路径中的注释的类不会导致任何问题,因此如果您真的想,可以。@Barath它有一个Id,但我不想注释it@JBNizet你完全正确,这是个坏主意。但我正在将一个遗留应用程序转换为spring boot,需要在重构之前让它正常工作。;-)我没有想到注释会无关紧要。@n3utrino那么在这种情况下,用
@NoRepositoryBean
注释定义一个存储库,该注释不会被JpaRepositories获取,并提供实现jparepository的存储库类。但这是一条艰难的道路。