Mapping 2 Tables with same structure in Hibernate
up vote
0
down vote
favorite
I have an existing application with an entity, for example Employee (Table EMP) and it is used at several places. Now after a long time, a replica (EMP_ARC) for the table EMP is created and we are supposed to refer it in certain scenarios.
As the table structure is exactly same I thought of reusing the POJO declaration. But I could not find a way to reuse the same POJO for two different table declarations. (I had seen examples of XML mapping to map one POJO to multiple tables but our application is using annotations and not able to find such option with annotation)
I cannot use Inheritance strategy because polymorphic queries will degrade the performance of the application and the EMP_ARC table has to be referred only when required.
Could anyone please tell me if creating a duplicate POJO and mapping it to the replica table is the only solution or any other approach is available.
**Sample Code:**
Table structure for EMP and EMP_ARC (exactly same structure)
EMP_ID LONG
EMP_NAME VARCHAR2(100)
**Existing Java Bean mapped to EMP**
**This entity bean cannot be modified**
//getter and setters omitted
@Entity
@Table(name="EMP")
public class Employee{
@Id
@Column(name="EMP_ID")
Long empid;
@Column(name="EMP_NAME")
String empName;
}
//Scenario 1 Query EMP table
String hql = "from Employee";
//Scenario 2 Query EMP_ARC table -- Like SELECT * FROM EMP_ARC
//Not sure of how to write the HQL using the same Employee POJO.
//Output of this HQL has to be an Employee POJO.
I want to map the same Employee POJO to the table EMP_ARC also but not able to find a way.
Alternatively, if I can selectively enable/disable polymorphic queries then I will be able to use Inheritance with strategy TABLE_PER_CLASS.
--- Workaround ---
To dynamically enable or disable polymorphic queries, I am using two different session factories.
- I have two POJOs Employee and EmployeeArc (inheriting Employee).
- Inheritance strategy used is TABLE_PER_CLASS.
- One session factory will refer to the Employee entity alone and the other session factory will have both the Employee and EmployeeArc entities.
- Whenever polymorphic query feature is not required then I will use the first session factory, otherwise use the second one.
If anybody is aware of a better solution, please help me in solving this in a better way.
hibernate-mapping
add a comment |
up vote
0
down vote
favorite
I have an existing application with an entity, for example Employee (Table EMP) and it is used at several places. Now after a long time, a replica (EMP_ARC) for the table EMP is created and we are supposed to refer it in certain scenarios.
As the table structure is exactly same I thought of reusing the POJO declaration. But I could not find a way to reuse the same POJO for two different table declarations. (I had seen examples of XML mapping to map one POJO to multiple tables but our application is using annotations and not able to find such option with annotation)
I cannot use Inheritance strategy because polymorphic queries will degrade the performance of the application and the EMP_ARC table has to be referred only when required.
Could anyone please tell me if creating a duplicate POJO and mapping it to the replica table is the only solution or any other approach is available.
**Sample Code:**
Table structure for EMP and EMP_ARC (exactly same structure)
EMP_ID LONG
EMP_NAME VARCHAR2(100)
**Existing Java Bean mapped to EMP**
**This entity bean cannot be modified**
//getter and setters omitted
@Entity
@Table(name="EMP")
public class Employee{
@Id
@Column(name="EMP_ID")
Long empid;
@Column(name="EMP_NAME")
String empName;
}
//Scenario 1 Query EMP table
String hql = "from Employee";
//Scenario 2 Query EMP_ARC table -- Like SELECT * FROM EMP_ARC
//Not sure of how to write the HQL using the same Employee POJO.
//Output of this HQL has to be an Employee POJO.
I want to map the same Employee POJO to the table EMP_ARC also but not able to find a way.
Alternatively, if I can selectively enable/disable polymorphic queries then I will be able to use Inheritance with strategy TABLE_PER_CLASS.
--- Workaround ---
To dynamically enable or disable polymorphic queries, I am using two different session factories.
- I have two POJOs Employee and EmployeeArc (inheriting Employee).
- Inheritance strategy used is TABLE_PER_CLASS.
- One session factory will refer to the Employee entity alone and the other session factory will have both the Employee and EmployeeArc entities.
- Whenever polymorphic query feature is not required then I will use the first session factory, otherwise use the second one.
If anybody is aware of a better solution, please help me in solving this in a better way.
hibernate-mapping
Have you produced any code? If so, please share it.
– Christopher
Nov 20 at 10:22
Hi @Christopher, I have placed the sample code. Could you please help.
– Jayalakshmi Das
Nov 23 at 8:34
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I have an existing application with an entity, for example Employee (Table EMP) and it is used at several places. Now after a long time, a replica (EMP_ARC) for the table EMP is created and we are supposed to refer it in certain scenarios.
As the table structure is exactly same I thought of reusing the POJO declaration. But I could not find a way to reuse the same POJO for two different table declarations. (I had seen examples of XML mapping to map one POJO to multiple tables but our application is using annotations and not able to find such option with annotation)
I cannot use Inheritance strategy because polymorphic queries will degrade the performance of the application and the EMP_ARC table has to be referred only when required.
Could anyone please tell me if creating a duplicate POJO and mapping it to the replica table is the only solution or any other approach is available.
**Sample Code:**
Table structure for EMP and EMP_ARC (exactly same structure)
EMP_ID LONG
EMP_NAME VARCHAR2(100)
**Existing Java Bean mapped to EMP**
**This entity bean cannot be modified**
//getter and setters omitted
@Entity
@Table(name="EMP")
public class Employee{
@Id
@Column(name="EMP_ID")
Long empid;
@Column(name="EMP_NAME")
String empName;
}
//Scenario 1 Query EMP table
String hql = "from Employee";
//Scenario 2 Query EMP_ARC table -- Like SELECT * FROM EMP_ARC
//Not sure of how to write the HQL using the same Employee POJO.
//Output of this HQL has to be an Employee POJO.
I want to map the same Employee POJO to the table EMP_ARC also but not able to find a way.
Alternatively, if I can selectively enable/disable polymorphic queries then I will be able to use Inheritance with strategy TABLE_PER_CLASS.
--- Workaround ---
To dynamically enable or disable polymorphic queries, I am using two different session factories.
- I have two POJOs Employee and EmployeeArc (inheriting Employee).
- Inheritance strategy used is TABLE_PER_CLASS.
- One session factory will refer to the Employee entity alone and the other session factory will have both the Employee and EmployeeArc entities.
- Whenever polymorphic query feature is not required then I will use the first session factory, otherwise use the second one.
If anybody is aware of a better solution, please help me in solving this in a better way.
hibernate-mapping
I have an existing application with an entity, for example Employee (Table EMP) and it is used at several places. Now after a long time, a replica (EMP_ARC) for the table EMP is created and we are supposed to refer it in certain scenarios.
As the table structure is exactly same I thought of reusing the POJO declaration. But I could not find a way to reuse the same POJO for two different table declarations. (I had seen examples of XML mapping to map one POJO to multiple tables but our application is using annotations and not able to find such option with annotation)
I cannot use Inheritance strategy because polymorphic queries will degrade the performance of the application and the EMP_ARC table has to be referred only when required.
Could anyone please tell me if creating a duplicate POJO and mapping it to the replica table is the only solution or any other approach is available.
**Sample Code:**
Table structure for EMP and EMP_ARC (exactly same structure)
EMP_ID LONG
EMP_NAME VARCHAR2(100)
**Existing Java Bean mapped to EMP**
**This entity bean cannot be modified**
//getter and setters omitted
@Entity
@Table(name="EMP")
public class Employee{
@Id
@Column(name="EMP_ID")
Long empid;
@Column(name="EMP_NAME")
String empName;
}
//Scenario 1 Query EMP table
String hql = "from Employee";
//Scenario 2 Query EMP_ARC table -- Like SELECT * FROM EMP_ARC
//Not sure of how to write the HQL using the same Employee POJO.
//Output of this HQL has to be an Employee POJO.
I want to map the same Employee POJO to the table EMP_ARC also but not able to find a way.
Alternatively, if I can selectively enable/disable polymorphic queries then I will be able to use Inheritance with strategy TABLE_PER_CLASS.
--- Workaround ---
To dynamically enable or disable polymorphic queries, I am using two different session factories.
- I have two POJOs Employee and EmployeeArc (inheriting Employee).
- Inheritance strategy used is TABLE_PER_CLASS.
- One session factory will refer to the Employee entity alone and the other session factory will have both the Employee and EmployeeArc entities.
- Whenever polymorphic query feature is not required then I will use the first session factory, otherwise use the second one.
If anybody is aware of a better solution, please help me in solving this in a better way.
hibernate-mapping
hibernate-mapping
edited Nov 28 at 10:16
asked Nov 20 at 10:15
Jayalakshmi Das
12
12
Have you produced any code? If so, please share it.
– Christopher
Nov 20 at 10:22
Hi @Christopher, I have placed the sample code. Could you please help.
– Jayalakshmi Das
Nov 23 at 8:34
add a comment |
Have you produced any code? If so, please share it.
– Christopher
Nov 20 at 10:22
Hi @Christopher, I have placed the sample code. Could you please help.
– Jayalakshmi Das
Nov 23 at 8:34
Have you produced any code? If so, please share it.
– Christopher
Nov 20 at 10:22
Have you produced any code? If so, please share it.
– Christopher
Nov 20 at 10:22
Hi @Christopher, I have placed the sample code. Could you please help.
– Jayalakshmi Das
Nov 23 at 8:34
Hi @Christopher, I have placed the sample code. Could you please help.
– Jayalakshmi Das
Nov 23 at 8:34
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
You could go with inherited classes/entities. As I do not know your exact usecase, I would suggest you check these annotation-keywords:
- @MappedSuperclass
- @Inheritance
Here is an explanation about their differences: @MappedSuperclass vs. @Inheritance
Not able to use this because I cannot modify the existing class to use MappedSuperClass and I don't want polymorphic queries to be enabled while using Inheritance. If there is a way to selectively disable polymorphic queries then I can use Inheritance
– Jayalakshmi Das
Nov 26 at 13:39
Then I do not see a possibility do reuse the POJO. I think, you have to duplicate your POJO here :-(
– Tobi
Nov 26 at 13:42
Thank you for confirming. If you are aware of programmatically disabling polymorphic queries or any workaround for dynamically enabling/disabling them, please let me know.
– Jayalakshmi Das
Nov 27 at 6:52
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53390734%2fmapping-2-tables-with-same-structure-in-hibernate%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
You could go with inherited classes/entities. As I do not know your exact usecase, I would suggest you check these annotation-keywords:
- @MappedSuperclass
- @Inheritance
Here is an explanation about their differences: @MappedSuperclass vs. @Inheritance
Not able to use this because I cannot modify the existing class to use MappedSuperClass and I don't want polymorphic queries to be enabled while using Inheritance. If there is a way to selectively disable polymorphic queries then I can use Inheritance
– Jayalakshmi Das
Nov 26 at 13:39
Then I do not see a possibility do reuse the POJO. I think, you have to duplicate your POJO here :-(
– Tobi
Nov 26 at 13:42
Thank you for confirming. If you are aware of programmatically disabling polymorphic queries or any workaround for dynamically enabling/disabling them, please let me know.
– Jayalakshmi Das
Nov 27 at 6:52
add a comment |
up vote
0
down vote
You could go with inherited classes/entities. As I do not know your exact usecase, I would suggest you check these annotation-keywords:
- @MappedSuperclass
- @Inheritance
Here is an explanation about their differences: @MappedSuperclass vs. @Inheritance
Not able to use this because I cannot modify the existing class to use MappedSuperClass and I don't want polymorphic queries to be enabled while using Inheritance. If there is a way to selectively disable polymorphic queries then I can use Inheritance
– Jayalakshmi Das
Nov 26 at 13:39
Then I do not see a possibility do reuse the POJO. I think, you have to duplicate your POJO here :-(
– Tobi
Nov 26 at 13:42
Thank you for confirming. If you are aware of programmatically disabling polymorphic queries or any workaround for dynamically enabling/disabling them, please let me know.
– Jayalakshmi Das
Nov 27 at 6:52
add a comment |
up vote
0
down vote
up vote
0
down vote
You could go with inherited classes/entities. As I do not know your exact usecase, I would suggest you check these annotation-keywords:
- @MappedSuperclass
- @Inheritance
Here is an explanation about their differences: @MappedSuperclass vs. @Inheritance
You could go with inherited classes/entities. As I do not know your exact usecase, I would suggest you check these annotation-keywords:
- @MappedSuperclass
- @Inheritance
Here is an explanation about their differences: @MappedSuperclass vs. @Inheritance
answered Nov 23 at 9:43
Tobi
1848
1848
Not able to use this because I cannot modify the existing class to use MappedSuperClass and I don't want polymorphic queries to be enabled while using Inheritance. If there is a way to selectively disable polymorphic queries then I can use Inheritance
– Jayalakshmi Das
Nov 26 at 13:39
Then I do not see a possibility do reuse the POJO. I think, you have to duplicate your POJO here :-(
– Tobi
Nov 26 at 13:42
Thank you for confirming. If you are aware of programmatically disabling polymorphic queries or any workaround for dynamically enabling/disabling them, please let me know.
– Jayalakshmi Das
Nov 27 at 6:52
add a comment |
Not able to use this because I cannot modify the existing class to use MappedSuperClass and I don't want polymorphic queries to be enabled while using Inheritance. If there is a way to selectively disable polymorphic queries then I can use Inheritance
– Jayalakshmi Das
Nov 26 at 13:39
Then I do not see a possibility do reuse the POJO. I think, you have to duplicate your POJO here :-(
– Tobi
Nov 26 at 13:42
Thank you for confirming. If you are aware of programmatically disabling polymorphic queries or any workaround for dynamically enabling/disabling them, please let me know.
– Jayalakshmi Das
Nov 27 at 6:52
Not able to use this because I cannot modify the existing class to use MappedSuperClass and I don't want polymorphic queries to be enabled while using Inheritance. If there is a way to selectively disable polymorphic queries then I can use Inheritance
– Jayalakshmi Das
Nov 26 at 13:39
Not able to use this because I cannot modify the existing class to use MappedSuperClass and I don't want polymorphic queries to be enabled while using Inheritance. If there is a way to selectively disable polymorphic queries then I can use Inheritance
– Jayalakshmi Das
Nov 26 at 13:39
Then I do not see a possibility do reuse the POJO. I think, you have to duplicate your POJO here :-(
– Tobi
Nov 26 at 13:42
Then I do not see a possibility do reuse the POJO. I think, you have to duplicate your POJO here :-(
– Tobi
Nov 26 at 13:42
Thank you for confirming. If you are aware of programmatically disabling polymorphic queries or any workaround for dynamically enabling/disabling them, please let me know.
– Jayalakshmi Das
Nov 27 at 6:52
Thank you for confirming. If you are aware of programmatically disabling polymorphic queries or any workaround for dynamically enabling/disabling them, please let me know.
– Jayalakshmi Das
Nov 27 at 6:52
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53390734%2fmapping-2-tables-with-same-structure-in-hibernate%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Have you produced any code? If so, please share it.
– Christopher
Nov 20 at 10:22
Hi @Christopher, I have placed the sample code. Could you please help.
– Jayalakshmi Das
Nov 23 at 8:34