有谁知道如何为一个表创建多个POJO /实体? 没有得到DuplicateEntitites错误?
我需要多个pojos的原因是我想在某些情况下隐藏一些属性。
感谢您的时间。
更新:我如何实施Hrishikesh的建议。
@Entity(name="baseT1")
@Table(name="T1")
public class BaseT1{
}
@Entity(name="T1")
@Table(name="T1")
public class T1 extends BaseT1{
}
这给了我:
Invocation of init method failed; nested exception is
org.hibernate.DuplicateMappingException: Duplicate table mapping T1
错误。
答案 0 :(得分:2)
嗯,我的意思是这样的。
@Entity
@Table(name="T1")
public class BaseT1{
private String column1;
private String column2;
}
@Entity
@Table(name="T1")
public class BaseT2{
private String column1;
}
类BaseT1和BaseT2都映射到相同的T1表,但定义的属性较小,您将映射到实际的表列。这是最简单的方法之一。当然,除非你有一个区分值,比如record_type,它区分表中的两种类型的条目。 然后你必须使用@jhadesdev
提到的Discriminator解决方案答案 1 :(得分:0)
Java类(实体)的类名需要不同,然后您可以将同一个表映射到多个Java类。
答案 2 :(得分:0)
如果表格中有一些列可以区分不同的情况,请使用Single table per class hierarchy strategy。
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name="planetype",
discriminatorType=DiscriminatorType.STRING
)
@DiscriminatorValue("Plane")
public class Plane { ... }
@Entity
@DiscriminatorValue("A320")
public class A320 extends Plane { ... }
如果鉴别器列不存在或无法使用存储过程创建,则hibernate本身支持SQL @DiscriminatorFormula。
答案 3 :(得分:0)
您只需使用@MappedSuperClass
。
http://docs.jboss.org/hibernate/core/3.5/javadocs/org/hibernate/mapping/MappedSuperclass.html
@MappedSuperclass
class BaseT1 {
// add your properties and constraints here
}
@Entity
class T1 extends BaseT1 {
}
答案 4 :(得分:-1)
是的,我试过这个,可以使用一个pojo类将数据保存并检索到两个表中。
使用Hibernate-polymorphism支持将一个POJO类映射到两个表
第一
Create SecondaryEntityUserB.hbm.xml Mention `<class
name="PrimaryEntityUserA"
table="user_b"
entity-name ="SecondaryEntityUserB"
polymorphism = "explicit" >`
第二
PrimaryEntityUserA myObject = new PrimaryEntityUserA();
myObject.setId( new Long( 10 ) );
myObject.setName( "Tayaba" );
String entityName = "PrimaryEntityUserA";
session.save( entityName, myObject );
entityName = "SecondaryEntityUserB";
session.save( entityName, myObject );>
保存
List<PrimaryEntityUserA> usersA=LuminaHibernateUtil.getUtil().getList(session.createQuery( "from PrimaryEntityUserA a" ) );
if ( !usersA.isEmpty() ) {
for ( PrimaryEntityUserA a : usersA ) {
System.out.println( "Name from first table \t" + a.getName());
}
}
List<PrimaryEntityUserA> usersB =LuminaHibernateUtil.getUtil().getList(session.createQuery( "from SecondaryEntityUserB a" ) );
if ( !usersB.isEmpty() ) {
for ( PrimaryEntityUserA b : usersB ) {
System.out.println( "Name from sesond table \t" + b.getName() );
}
}
要检索
Regards
Naziya Tayaba
结论:我们可以在两个hbm文件中使用2个不同的表和entity-name属性并提及相同的名称属性值,也提到了polymorphism =&#34; explicit&#34;在secondaryentity.hbm.xml中。
请找到相同的有用链接: more recent Oracle documentation
[http://snaike.blogspot.in/2009/04/mapping-java-object-to-two-tables-using.html
ALTER TABLE foo MODIFY bar VARCHAR2(255) NOT NULL;