Java 休眠OneToMany FetchType.EAGER不返回值
我使用Hibernate 3.5.6和MySQL 5.1。 我有3个类:Item、Attribute、AttributeValue。它们以一对多的关系相互关联,我确实获得了给定项目的所有属性。但对于给定的属性,我不会得到AttributeValue。我看不到异常或错误,表中的数据看起来不错,这意味着数据的插入进行得很顺利 我尝试了不同的策略来获取属性值映射的属性模式,但结果总是空的 我错过了什么 以下是课程:Java 休眠OneToMany FetchType.EAGER不返回值,java,mysql,hibernate,one-to-many,Java,Mysql,Hibernate,One To Many,我使用Hibernate 3.5.6和MySQL 5.1。 我有3个类:Item、Attribute、AttributeValue。它们以一对多的关系相互关联,我确实获得了给定项目的所有属性。但对于给定的属性,我不会得到AttributeValue。我看不到异常或错误,表中的数据看起来不错,这意味着数据的插入进行得很顺利 我尝试了不同的策略来获取属性值映射的属性模式,但结果总是空的 我错过了什么 以下是课程: @Entity @Table(name = "Item") public class
@Entity
@Table(name = "Item")
public class Item implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private String serialNumber;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "item", cascade = CascadeType.ALL)
@Fetch(value = FetchMode.SELECT) // don't remove this line
@MapKey(name = "name")
private Map<String, Attribute> attributes = new HashMap<String, Attribute>();
protected Item() {
super();
}
public Item(String serialNumber) {
this();
setSerialNumber(serialNumber);
}
public String getSerialNumber() {
return serialNumber;
}
protected void setSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
}
public Map<String, Attribute> getAttributes() {
return attributes;
}
public void setAttributes(Map<String, Attribute> attributes) {
this.attributes = attributes;
}
}
下面是基础表的SQL:
--
-- Table structure for table `Attribute`
--
CREATE TABLE `Attribute` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`item_serialNumber` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `item_serialNumber` (`item_serialNumber`,`name`),
KEY `FK7839CA7C252F491C` (`item_serialNumber`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `Item`
--
CREATE TABLE `Item` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`serialNumber` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `serialNumber` (`serialNumber`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `AttributeValue`
--
CREATE TABLE `AttributeValue` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`value` varchar(255) DEFAULT NULL,
`attribute_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `attribute_id` (`attribute_id`,`value`),
KEY `FK4C1BA6C69CA0A39A` (`attribute_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Constraints for dumped tables
--
--
-- Constraints for table `Attribute`
--
ALTER TABLE `Attribute`
ADD CONSTRAINT `FK7839CA7C252F491C` FOREIGN KEY (`item_serialNumber`) REFERENCES `Item` (`serialNumber`);
--
-- Constraints for table `AttributeValue`
--
ALTER TABLE `AttributeValue`
ADD CONSTRAINT `FK4C1BA6C69CA0A39A` FOREIGN KEY (`attribute_id`) REFERENCES `Attribute` (`id`);
您已使用“值”而不是“属性”映射属性中的值。 @OneToMany注释应指定如下:
@OneToMany(fetch = FetchType.EAGER, mappedBy = "attribute", cascade = CascadeType.ALL)
谢谢,我真不敢相信我错过了。非常感谢。
--
-- Table structure for table `Attribute`
--
CREATE TABLE `Attribute` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`item_serialNumber` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `item_serialNumber` (`item_serialNumber`,`name`),
KEY `FK7839CA7C252F491C` (`item_serialNumber`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `Item`
--
CREATE TABLE `Item` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`serialNumber` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `serialNumber` (`serialNumber`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Table structure for table `AttributeValue`
--
CREATE TABLE `AttributeValue` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`value` varchar(255) DEFAULT NULL,
`attribute_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `attribute_id` (`attribute_id`,`value`),
KEY `FK4C1BA6C69CA0A39A` (`attribute_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Constraints for dumped tables
--
--
-- Constraints for table `Attribute`
--
ALTER TABLE `Attribute`
ADD CONSTRAINT `FK7839CA7C252F491C` FOREIGN KEY (`item_serialNumber`) REFERENCES `Item` (`serialNumber`);
--
-- Constraints for table `AttributeValue`
--
ALTER TABLE `AttributeValue`
ADD CONSTRAINT `FK4C1BA6C69CA0A39A` FOREIGN KEY (`attribute_id`) REFERENCES `Attribute` (`id`);
@OneToMany(fetch = FetchType.EAGER, mappedBy = "attribute", cascade = CascadeType.ALL)