2015-11-19 83 views
0

弹簧JPA与Hibernate和MySQL 5.7(依赖弹簧平台-BOM-1.1.4.RELEASE管理)额外的空项目

实体类:

@Entity 
 
@Table(name = "activity") 
 
public class ActivityEntity 
 
{ 
 

 
    @Id 
 
    @GeneratedValue(strategy=GenerationType.AUTO) 
 
    private Integer id; 
 

 
    // optional 
 
    @Column(name="project_id") 
 
    private Integer projectId; 
 

 
    @OneToOne(fetch=FetchType.EAGER) 
 
    @JoinColumn(name="container_id") 
 
    private ActivityEntity container; 
 

 
    @OneToMany(mappedBy="container", cascade={CascadeType.ALL}, fetch=FetchType.EAGER) 
 
    @OrderColumn(name="order") 
 
    private List<ActivityEntity> activities; 
 
    
 
    private String name; 
 
    private String description; 
 

 
... 
 
}

DAO类:

public interface IActivityDao extends JpaRepository<ActivityEntity, Integer> 
 
{ 
 

 
    List<ActivityEntity> findByContainerId(int containerId); 
 
    
 
}

数据库表:

CREATE TABLE `activity` (
 
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
 
    `project_id` bigint(20) DEFAULT NULL, 
 
    `container_id` bigint(20) DEFAULT NULL, 
 
    `name` varchar(128) NOT NULL, 
 
    `description` varchar(256) DEFAULT NULL, 
 
    `type` varchar(32) NOT NULL, 
 
    `mode` varchar(32) NOT NULL, 
 
    `tag` varchar(32) DEFAULT NULL, 
 
    `script` longtext, 
 
    `order` int(11) DEFAULT '1', 
 
    `created_user_id` varchar(45) DEFAULT NULL, 
 
    `created_date` datetime DEFAULT NULL, 
 
    `updated_user_id` varchar(45) DEFAULT NULL, 
 
    `updated_date` datetime DEFAULT NULL, 
 
    `projectId` int(11) DEFAULT NULL, 
 
    PRIMARY KEY (`id`), 
 
    KEY `container_id` (`container_id`), 
 
    CONSTRAINT `fk_container_id` FOREIGN KEY (`container_id`) REFERENCES `activity` (`id`) 
 
) ENGINE=InnoDB AUTO_INCREMENT=214 DEFAULT CHARSET=utf8;

数据库表中的内容: enter image description here

单元测试代码:

public class ActivityDaoTest extends AbstractDaoTest 
 
{ 
 
    @Resource 
 
    private IActivityDao activityDao; 
 
    
 
    @Test 
 
    public void testFindOne() throws Exception { 
 
     ActivityEntity activity = activityDao.findOne(210); 
 
     ActivityEntity root = activity.getContainer(); 
 
     
 
     int level = 0; 
 
     printActivity(activity, level); 
 
     Assert.assertNotNull(activity); 
 
     
 
     if (root != null) { 
 
      level = 0; 
 
      printActivity(root, level); 
 
     } 
 
    } 
 
... 
 
}

在上面的测试代码,root.getActivities()和activity.getActivities()返回图5和4项分别与所述第一项为空。

我是否错过实体中的某些东西?感谢帮助。

+1

第一:OneToMany的所有者方应该是ManyToOne,而不是OneToOne。其次,显示你的printActivity()方法,并显示输出。 –

回答

0

我会回答我的问题,赢得了(贴太早):

  1. 从实体
  2. 在表中的顺序列的值从0开始拆除为了属性( NULL项用于列表中的索引0)

解决了我的问题。

+0

好吧,这只是简单地将问题放在你想要通过一个订单列来排列列表项的问题上,然后再找出你的JPA提供者可能做错了什么。我使用不同的提供程序,所以不打扰我,但如果您现在不调试,可能会在稍后的某个时间点打扰您 –