2017-02-27 7 views
0

我正在将项目从jboss7迁移到wildfly10。奇怪的是,jboss中生成的查询在wildfly10中不同,导致表结构必须更改,但这不是预期的结果。JPA继承问题,为什么生成的查询在wildfly10和jboss7之间有所不同

public class BaseAnnotation implements Serializable { 
    private static final long serialVersionUID = 6636704943305921427L; 
} 


@Entity 
@Table(name="one") 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
public class oneBaseAnnotation extends BaseAnnotation { 
@Id 
@GeneratedValue(generator = "baseAnnotationSequencer") 
@SequenceGenerator(name = "baseAnnotationSequencer", sequenceName = "BASEANNOTATION_SEQ") 
private Long id; 

private String annotationType; 
..... 
} 

@Entity 
public class TwoStructureAnnotation extends oneBaseAnnotation { 

private static final long serialVersionUID = -5838272604038154615L; 

@OneToMany 
@JoinTable(name= "CSA_CS") 
private List<TwoStructure> twoStructures = new ArrayList<TwoStructure>(); 

public TwoStructureAnnotation() { 
    setAnnotationType("Two Structure"); 
} 
..... 
} 

public class..... { 
    protected List<T> createQuery(int first, int pageSize, 
     List<SortMeta> multiSortMeta, Map<String, String> filters, 
     String joinField) { 
    // Setup 
    CriteriaBuilder cb = getObjectEntityManager().getCriteriaBuilder(); 
    CriteriaQuery<T> criteria = (CriteriaQuery<T>) cb.createQuery(); 
    Root<A> annotationRoot = criteria.from(TwoStructureAnnotation.class); 
    ListJoin<A, T> joinRoot = annotationRoot.joinList("twosStructures"); 
    Predicate restrictions = cb.conjunction(); 

    // Filter 
    filters.putAll(this.getBaseFilter()); 
    restrictions = cb.and(restrictions, 
      createGlobalFilter(filters, joinRoot, cb)); 

    restrictions = cb.and(restrictions, 
      cb.equal(annotationRoot, annotation)); 
    ... 
    // Query creation 
    criteria.where(restrictions); 
    criteria.select(joinRoot); 

    // Restrict Returns 
    TypedQuery<T> returnQuery = getObjectEntityManager().createQuery(
      criteria); 
    returnQuery.setFirstResult(first); 
    returnQuery.setMaxResults(pageSize); 

    List<T> results = returnQuery.getResultList(); 

    ....} 

查询下面,不同的是表中的键CSA_CS上的inner join。我不知道为什么,请给我建议,谢谢。

--in Jboss7

​​

---在wildfly10

select 
* 
from 
(select 
    crystalstr2_.id as id1_36_, 
    crystalstr2_.pdbEntry_id as pdbEntry_id3_36_, 
    crystalstr2_.title as title2_36_ 
from 
    ONE crystalstr0_ 
inner join 
    CSA_CS crystalstr1_ 
     on crystalstr0_.id=crystalstr1_.TWOStructureAnnotation_id 
inner join 
    TwoStructure crystalstr2_ 
     on crystalstr1_.crystalStructures_id=crystalstr2_.id 
where 
    crystalstr0_.DTYPE='TwoStructureAnnotation' 
    and 1=1 
    and 1=1 
    and crystalstr0_.id=?) 
where 
rownum <= ? 

表:

table-TWOSTRUCTURE 
ID 
TITLE 

table-CSA_CS 
ONE_ID 
CRYSTALSTRUCTURES_ID 

table-ONE 
DTYPE 
ID 
ANNOTATIONTYPE 

回答

0

JBoss7于冬眠4.x和wildfly 10个一般冬眠5.在hibernate 5,Oracle实现了'内连接'。如果你使用Oracle10gDialect,那么 Oracle10gDialect增加了对ANSI连接的支持。子类(例如Oracle12cDialect)继承此功能。

+0

谢谢你的回复。现在的问题是不同服务器中的密钥ID名称具有不同的列名称。两个服务器之间的内部连接相同。 – fromdw

相关问题