User Type是根据具体的需求来的。
比如说,一个User有很多个Email,但是有多少个并不确定。这种情况下,我们有2种设计:第一种,设计一张User_Email表,与User表形成多对一的关系。还有一个种,在User表中增加一个字段,这个字段表示Email,多个Email数据之间用分号隔开进行存储。
这两种设计都是ok的,显然后面一种违反了所谓的范式,不过有时候可能为了性能等原因,我们也会采取后面一种方式,因为它简单易用,查询时无需对字表进行关联查询。在这种情况下,如果我们使用Hibernate的User Type,可以把这样的一个字段映射成Java中的List<String>,然后由ORM框架来帮你做底层的类型转化与处理。这样显然会方便很多。不过User Type的缺点就是该字段无法进行精确的Query查询,所以也需要在设计时加以考虑。
比如说,一个User有很多个Email,但是有多少个并不确定。这种情况下,我们有2种设计:第一种,设计一张User_Email表,与User表形成多对一的关系。还有一个种,在User表中增加一个字段,这个字段表示Email,多个Email数据之间用分号隔开进行存储。
这两种设计都是ok的,显然后面一种违反了所谓的范式,不过有时候可能为了性能等原因,我们也会采取后面一种方式,因为它简单易用,查询时无需对字表进行关联查询。在这种情况下,如果我们使用Hibernate的User Type,可以把这样的一个字段映射成Java中的List<String>,然后由ORM框架来帮你做底层的类型转化与处理。这样显然会方便很多。不过User Type的缺点就是该字段无法进行精确的Query查询,所以也需要在设计时加以考虑。