java相关的一切杂言碎语

2009年5月10日星期日

hibernate annotion多对多关系示例

实体之间是多对多的关系,如图:


错误的实体代码如下

JAVA 代码:
  1. @ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
  2. @JoinTable(name = "product_packagetype:packageTypes:products")
  3. private java.util.Listimplambition.forxxx.model.PackageType> packageTypes;
  4. /**
  5. * @generated
  6. */
  7. @ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
  8. @JoinTable(name = "product_productcolor:productColors:products")
  9. private java.util.Listimplambition.forxxx.model.ProductColor> productColors;
  10. /**
  11. * @generated
  12. */
  13. @ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
  14. @JoinTable(name = "product_attach:attachs:products")
  15. private java.util.Listimplambition.forxxx.model.Attach> attachs;
这样的代码本身不能正常运行,报错 cannot simultaneously fetch multiple bags。
改成FetchType.LAZY后,报错 WARN [main] 2009-05-10 16:46:18,655 - SQL Error: 1064, SQLState: 42000
ERROR [main] 2009-05-10 16:46:18,655 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':packageTypes:products packagetyp0_ left outer join PackageType packagetyp1_ on ' at line 1



最后只能修改为:
Product实体

JAVA 代码:
  1. /**
  2. * @generated
  3. */
  4. @ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
  5. //@JoinTable(name = "product_packagetype:packageTypes:products")
  6. @JoinTable(name = "product_packagetype", joinColumns = { @JoinColumn(name = "packageTypes") }, inverseJoinColumns = { @JoinColumn(name = "products") })
  7. private java.util.Listimplambition.forxxx.model.PackageType> packageTypes;
  8. /**
  9. * @generated
  10. */
  11. @ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
  12. //@JoinTable(name = "product_productcolor:productColors:products")
  13. @JoinTable(name = "product_productcolor", joinColumns = { @JoinColumn(name = "productColors") }, inverseJoinColumns = { @JoinColumn(name = "products") })
  14. private java.util.Listimplambition.forxxx.model.ProductColor> productColors;
  15. /**
  16. * @generated
  17. */
  18. @ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
  19. //@JoinTable(name = "product_attach:attachs:products")
  20. @JoinTable(name = "product_attach", joinColumns = { @JoinColumn(name = "attachs") }, inverseJoinColumns = { @JoinColumn(name = "products") })
  21. private java.util.Listimplambition.forxxx.model.Attach> attachs;
其他关联实体只列出一个示例,代码如下(注释掉的为studio生成的代码)

JAVA 代码:
  1. /**
  2. * @generated
  3. */
  4. //@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
  5. @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.LAZY, mappedBy="attachs")
  6. private java.util.Listimplambition.forxxx.model.Product> products;

1 条评论:

pic