Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to map one class to different tables using hibernate/jpa annotations

I'm currently stuck with what seems to be a very simple problem, but I just can't seem to find a way around:

I have 2 identical tables:

  1. tbl_creditcard_approved_txns
  2. tbl_creditcard_declined_txns

The fields in both are identical, and I have one class - Transaction that is used to represent all the appropriate fields in the tables.

I'm trying to map two different entities (one for each table) to the above class. In the old world, I'd have created two hbm.xml files, one for each table and map both of them to Transaction. I'd then use the entity name during persistence to ensure that the object gets persisted in the correct table, depending on the circumstance.

I am trying to use annotations currently to achieve the same but have had no luck so far in mapping the 2 entities to a single class. Is this possible at all?

I'm currently using a different approach in that I've extracted all the common fields (identical column names) into an @MappedSuperClass and have created two separate classes (one for each entity) that extend from the super class (these classes just have the same fields with different column names, where applicable).

like image 353
Jay Avatar asked Aug 17 '10 18:08

Jay


1 Answers

Using @MappedSuperclass, you would proceed as follows:

@MappedSuperclass
public class Transaction ...

@Entity
@Table(name="tbl_creditcard_approved_txns")
public class DeclinedTransaction extends Transaction ...

@Entity
@Table(name="tbl_creditcard_declined_txns")
public class ApprovedTransaction extends Transaction ...

Use @AttributeOverride to override column names between the two types of Transaction objects, if needed.

Update: I see that you want to map one @Entity to two tables in the same EntityManagerFactory ... I don't think you can do that.

like image 184
les2 Avatar answered Sep 17 '22 23:09

les2