2015-11-19 85 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提供者可能做錯了什麼。我使用不同的提供程序,所以不打擾我,但如果您現在不調試,可能會在稍後的某個時間點打擾您 –