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;
单元测试代码:
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项分别与所述第一项为空。
我是否错过实体中的某些东西?感谢帮助。
第一:OneToMany的所有者方应该是ManyToOne,而不是OneToOne。其次,显示你的printActivity()方法,并显示输出。 –