用于mysql数据类型SET的Hibernate注释

时间:2014-05-30 07:12:38

标签: java mysql spring hibernate jpa

我有一个MySQL表格,其中属性dataType的{​​{1}}为SET。像这样的东西:

workingDays

现在相应地我想使用CREATE TABLE IF NOT EXISTS `course` ( `courseId` int(11) NOT NULL AUTO_INCREMENT, `courseName` varchar(255) NOT NULL DEFAULT '0', `courseDescription` varchar(255) DEFAULT NULL, `courseDuration` int(11) DEFAULT NULL, `courseBatchSize` int(11) NOT NULL DEFAULT '0', `courseEnrolmentDate` date DEFAULT NULL, `workingDays` set('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') DEFAULT NULL, `courseFee` float DEFAULT NULL, `isScholarshipAvailable` enum('Y','N') DEFAULT NULL, `scholarshipCriteria` varchar(255) DEFAULT NULL, `scholarshipExamDate` date DEFAULT NULL, `successRate` tinyint(4) DEFAULT NULL, `rating` tinyint(4) DEFAULT NULL, `otherInfo` varchar(255) DEFAULT NULL, `courseDiscount` float DEFAULT NULL, `institute` int(11) DEFAULT NULL, `exam` int(11) DEFAULT NULL, PRIMARY KEY (`courseId`), KEY `FK_INS` (`institute`), KEY `FK_EX` (`exam`), CONSTRAINT `FK_EX` FOREIGN KEY (`exam`) REFERENCES `exam` (`examId`), CONSTRAINT `FK_INS` FOREIGN KEY (`institute`) REFERENCES `institute` (`instituteId`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1 COMMENT='contains course info'; 注释使用pojo进行映射。现在我正在这样做

jpa

注释@Column来自包javax.persistence。使用来自hibernate包的@Type注释我收到错误

@Column(name = "workingDays", nullable = false, unique = false)
@Type(type="org.hibernate.type.settype")
private Set<String> workingDays;

我的pom.xml文件添加了以下依赖项

    Caused by: java.lang.ClassNotFoundException: org.hibernate.type.settype

我不确定如何解决此问题。映射到 <!-- MySQL database driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.30</version> </dependency> <dependency> <groupId>javax.transaction</groupId> <artifactId>jta</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0.2</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.3.5.Final</version> </dependency> <dependency> <groupId>org.hibernate.common</groupId> <artifactId>hibernate-commons-annotations</artifactId> <version>4.0.4.Final</version> </dependency> <!-- Hibernate library dependecy start --> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.3</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>antlr</groupId> <artifactId>antlr</artifactId> <version>2.7.7</version> </dependency> <!-- Hibernate library dependecy end --> 数据库中的集合的任何见解或其他解决方法都会有所帮助。

编辑:还建议我是否可以在不使用SET的情况下将工作日属性存储在数据库中。此工作日属性适用于特定的公司类,我需要向最终用户显示该公司的工作日。有关数据类型的建议也非常有用。

感谢。

1 个答案:

答案 0 :(得分:1)

您不需要简单类型的@Type(type="org.hibernate.type.setType")声明。您可以从字段声明中删除它。

只有在使用高级自定义类型时才需要@Type注释

class Account {

  @Type(type="com.something.type.CustomDateType")
  @Column(name = "OPEN_DATE")
  private CustomDate date;

}