单表的多个POJO /实体

问题描述 投票:3回答:5

有谁知道如何为一个表创建多个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

错误。

java spring hibernate spring-mvc entities
5个回答
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解决方案


0
投票

Java类(实体)的类名需要不同,然后您可以将同一个表映射到多个Java类。


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


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 {
}

-1
投票

是的,我试过这个,可以使用一个pojo类将数据保存并检索到两个表中。

一个POJO类使用Hibernate-polymorphism支持映射到两个表

第一

Create PrimaryEntityUserA.java Pojo and its hbm file 
PrimaryEntityUserA.hbm.xml  Mention  `<class 
name="PrimaryEntityUserA" 
table="user_a"
entity-name ="PrimaryEntityUserA" >`

第二

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() );                
     }
}

结论:我们可以在两个hbm文件中使用2个不同的表和entity-name属性,并提及相同的name属性值,在secondaryentity.hbm.xml中也提到了polymorphism =“explicit”。

请找到相同的有用链接:http://snaike.blogspot.in/2009/04/mapping-java-object-to-two-tables-using.html

[https://coderanch.com/t/492558/databases/Mapping-POJO-table-Hibernate-XML]

Regards
Naziya Tayaba
© www.soinside.com 2019 - 2024. All rights reserved.