[hibernate-issues] [Hibernate-JIRA] Updated: (HHH-4469) NullPointerException on ManyToMany association at line org.hibernate.type.AbstractType.getHashCode(AbstractType.java:136)
Blumm (JIRA)
noreply at atlassian.com
Fri Oct 2 22:53:50 EDT 2009
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-4469?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Blumm updated HHH-4469:
-----------------------
Attachment: hibernate-log.txt
Same issue...
> NullPointerException on ManyToMany association at line org.hibernate.type.AbstractType.getHashCode(AbstractType.java:136)
> --------------------------------------------------------------------------------------------------------------------------
>
> Key: HHH-4469
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-4469
> Project: Hibernate Core
> Issue Type: Bug
> Components: core
> Affects Versions: 3.3.2
> Environment: 2009-10-01 13:27:28,062 INFO [org.hibernate.cfg.annotations.Version] - Hibernate Annotations 3.4.0.GA
> 2009-10-01 13:27:28,078 INFO [org.hibernate.cfg.Environment] - Hibernate 3.3.2.GA
> 2009-10-01 13:27:28,078 INFO [org.hibernate.cfg.Environment] - hibernate.properties not found
> 2009-10-01 13:27:28,078 INFO [org.hibernate.cfg.Environment] - Bytecode provider name : javassist
> 2009-10-01 13:27:28,078 INFO [org.hibernate.cfg.Environment] - using JDK 1.4 java.sql.Timestamp handling
> 2009-10-01 13:27:28,141 INFO [org.hibernate.annotations.common.Version] - Hibernate Commons Annotations 3.1.0.GA
> 2009-10-01 13:27:28,141 INFO [org.hibernate.ejb.Version] - Hibernate EntityManager 3.3.1.GA
> Reporter: Sachin Mishra
> Attachments: hibernate-log.txt, hibernate-log.txt
>
>
> NullPointer Exception gets thrown on manytomany association when using composite key. Following the example from site http://boris.kirzner.info/blog/archives/2008/07/19/hibernate-annotations-the-many-to-many-association-with-composite-key/
> Loading the product entity correctly loads everything as expected but saving new product record doesn't work when using the composite keys.
> Item.java
> @Entity
> @Table(name="item")
> public class Item implements Serializable {
> private Integer id;
> private String name;
> private List<ProductItem> productItems = new LinkedList<ProductItem>();
> private static Logger logger = Logger.getLogger(Item.class);
> /**
> * @return the id
> */
> @Id
> @GeneratedValue(strategy=GenerationType.AUTO)
> @Column(name="item_id")
> public Integer getId() {
> return id;
> }
> /**
> * @param id the id to set
> */
> public void setId(Integer id) {
> this.id = id;
> }
> /**
> * @return the name
> */
> public String getName() {
> return name;
> }
> /**
> * @param name the name to set
> */
> public void setName(String name) {
> this.name = name;
> }
> /**
> * @return the productItems
> */
> @OneToMany(fetch=FetchType.LAZY,mappedBy="pk.item",cascade={CascadeType.ALL})
> @Cascade({org.hibernate.annotations.CascadeType.ALL})
>
> public List<ProductItem> getProductItems() {
> return productItems;
> }
> /**
> * @param productItems the productItems to set
> */
> public void setProductItems(List<ProductItem> productItems) {
> this.productItems = productItems;
> }
> @Override
> public int hashCode() {
> int result;
> result = (this.id != null ? id.hashCode() : 0);
> result = 31 * result + (name != null ? name.hashCode() : 0);
> return result;
> }
> @Override
> public boolean equals(Object obj) {
> if (obj == null) {
> return false;
> }
> if (getClass() != obj.getClass()) {
> return false;
> }
> final Item other = (Item) obj;
> if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
> return false;
> }
> if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
> return false;
> }
> return true;
> }
> }
> Product.java
> @Entity
> @Table(name="product")
> public class Product implements Serializable {
> private static Logger logger = Logger.getLogger(Product.class);
> private Integer id;
>
> private String name;
>
> private String description;
>
> private double regularPrice;
>
> private List<ProductItem> productItems = new LinkedList<ProductItem>();
> /**
> * @return the id
> */
> @Id
> @GeneratedValue(strategy=GenerationType.AUTO)
> @Column(name="prod_id")
> public Integer getId() {
> return id;
> }
> /**
> * @return the name
> */
> @Column(name="prod_name")
> public String getName() {
> return name;
> }
> /**
> * @param name the name to set
> */
> public void setName(String name) {
> this.name = name;
> }
>
> /**
> * @return the productItems
> */
> @OneToMany(fetch=FetchType.LAZY,mappedBy="pk.product",cascade={CascadeType.ALL})
> @Cascade({org.hibernate.annotations.CascadeType.ALL})
> public List<ProductItem> getProductItems() {
> return productItems;
> }
> /**
> * @param productItems the productItems to set
> */
> public void setProductItems(List<ProductItem> productItems) {
> this.productItems = productItems;
> }
> /**
> * @param id the id to set
> */
> public void setId(Integer id) {
> this.id = id;
> }
> @Override
> public int hashCode() {
> int result;
> result = (id != null ? id.hashCode() : 0);
> result = 31 * result + (name != null ? name.hashCode() : 0);
> return result;
> }
> @Override
> public boolean equals(Object obj) {
> if (obj == null) {
> return false;
> }
> if (getClass() != obj.getClass()) {
> return false;
> }
> final Product other = (Product) obj;
> if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
> return false;
> }
> if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
> return false;
> }
> return true;
> }
> ProductItem.java
> @Entity
> @Table(name = "productItem")
> @AssociationOverrides({
> @AssociationOverride(name = "pk.product", joinColumns = @JoinColumn(name = "product_id")),
> @AssociationOverride(name = "pk.item", joinColumns = @JoinColumn(name = "item_id"))
> })
> public class ProductItem implements Serializable{
> private static Logger logger = Logger.getLogger(ProductItem.class);
> private ProductItemPk pk ;
>
> /**
> * @return the item
> */
> @Transient
> public Item getItem() {
> return getPk().getItem();
> }
> /**
> * @param item the item to set
> */
> public void setItem(Item item) {
> getPk().setItem(item);
> }
> /**
> * @return the Product
> */
> @Transient
> public Product getProduct() {
> return getPk().getProduct();
> }
> /**
> * @param Product the Product to set
> */
> public void setProduct(Product Product) {
> getPk().setProduct(Product);
> }
> /**
> * @return the pk
> */
> @EmbeddedId
> public ProductItemPk getPk() {
> return pk;
> }
> /**
> * @param pk the pk to set
> */
> public void setPk(ProductItemPk pk) {
> this.pk = pk;
> }
> @Override
> public boolean equals(Object o) {
> if (this == o) return true;
> if (o == null || getClass() != o.getClass()) return false;
> ProductItem that = (ProductItem) o;
> if (getPk() != null ? !getPk().equals(that.getPk()) : that.getPk() != null) return false;
> return true;
> }
> @Override
> public int hashCode() {
> return (getPk() != null ? getPk().hashCode() : 0);
> }
> ProductItemPk.java
> @Embeddable
> public class ProductItemPk implements Serializable{
> private static Logger logger = Logger.getLogger(ProductItemPk.class);
> private Item item;
>
> private Product product;
> /**
> * @return the item
> */
> @ManyToOne(optional=false)
> public Item getItem() {
> return item;
> }
> /**
> * @param item the item to set
> */
> public void setItem(Item item) {
> this.item = item;
> }
> /**
> * @return the product
> */
> @ManyToOne(optional=false)
> public Product getProduct() {
> return product;
> }
> /**
> * @param product the product to set
> */
> public void setProduct(Product product) {
> this.product = product;
> }
> @Override
> public boolean equals(Object o) {
> if (this == o) return true;
> if (o == null || getClass() != o.getClass()) return false;
> ProductItemPk that = (ProductItemPk) o;
> if (item != null ? !item.equals(that.item) : that.item != null) return false;
> if (product != null ? !product.equals(that.product) : that.product != null)
> return false;
> return true;
> }
> @Override
> public int hashCode() {
> logger.error("productitemPK hashcode called");
> int result;
> result = (item != null ? item.hashCode() : 0);
> result = 31 * result + (product != null ? product.hashCode() : 0);
> return result;
> }
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list