java - 关于Spring的CrudRepository的一对多的save问题
怪我咯
怪我咯 2017-04-18 09:59:07
0
3
383

各位高手,我在使用hibernate、jpa、springdata集成时遇到了如下的问题:

model

@Entity
@Table(name = "t_group", schema = "domain")
public class Group
{
    @Id
    @GeneratedValue
    private Long id;
    
    private String name;
    
    @OneToMany(mappedBy = "group", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<User> users;

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public Set<User> getUsers()
    {
        return users;
    }

    public void setUsers(Set<User> users)
    {
        this.users = users;
    }

    public Long getId()
    {
        return id;
    }   
}
@Entity
@Table(name = "t_user", schema = "domain")
public class User
{
    @Id
    @GeneratedValue
    private Long id;
    
    private String name;
    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "group_id", nullable = false)
    private Group group;

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }
    
    public Long getId()
    {
        return id;
    }   
}

repository

public interface GroupRepository extends CrudRepository<Group, Long>
{

}

config

@Configuration
@EnableJpaRepositories(basePackages = { "**.**.**.repository" })
public class RepositoryIntegrationTestsConfig
{
    @Bean
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf)
    {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(emf);

        return transactionManager;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource)
    {
        LocalContainerEntityManagerFactoryBean emfb = new LocalContainerEntityManagerFactoryBean();
        emfb.setDataSource(dataSource());
        emfb.setJpaVendorAdapter(jpaVendorAdapter());
        emfb.setPackagesToScan("com.**.**.entity");

        Properties properties = new Properties();
        properties.setProperty("hibernate.hbm2ddl.auto", "create");
        properties.setProperty("hibernate.format_sql", "true");
        emfb.setJpaProperties(properties);

        return emfb;
    }

    @Bean
    public JpaVendorAdapter jpaVendorAdapter()
    {
        HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
        adapter.setDatabase(Database.H2);
        adapter.setShowSql(false);
        adapter.setGenerateDdl(false);
        adapter.setDatabasePlatform("org.hibernate.dialect.H2Dialect");

        return adapter;
    }

    @Bean(name = "integrationTestDataSource")
    public DataSource dataSource()
    {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("org.h2.Driver");
        dataSource.setUrl("jdbc:h2:~/test;INIT=CREATE SCHEMA IF NOT EXISTS domain");
        dataSource.setUsername("sa");
        dataSource.setPassword("");

        return dataSource;
    }
}

test

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = RepositoryIntegrationTestsConfig.class)
public class GroupRepositoryIntegrationTest
{
    @Autowired
    private GroupRepository repository;
    
    @Test
    public void saveShouldSucceed()
    {
        Group group = new Group();
        group.setName("name");
        
        Set<User> users = new HashSet<>();
        User user1 = new User();    
        user1.setName("user1");
        
        User user2 = new User();
        user2.setName("user2");
        
        users.add(user1);
        users.add(user2);

        group.setUsers(users);
        repository.save(group);
    }
}

当我执行测试时,会报如下错误:

...
Caused by: org.h2.jdbc.jdbcSQLException: NULL not allowed for column "GROUP_ID";
...

请问是什么原因?

怪我咯
怪我咯

走同样的路,发现不同的人生

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!