<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      https://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<jdo xmlns="https://db.apache.org/jdo/xmlns/jdo"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="https://db.apache.org/jdo/xmlns/jdo
     https://db.apache.org/jdo/xmlns/jdo_3_2.xsd">
  <package name="org.apache.jdo.tck.pc.mylib">
    <class name="PCClass" identity-type="datastore">
      <field name="transientNumber1" persistence-modifier="none"/>
      <field name="transientNumber2" persistence-modifier="none"/>
      <query name="classJDO">
          SELECT FROM org.apache.jdo.tck.pc.mylib.PCClass
      </query>
      <fetch-group name="fetchGroup1" post-load="true">
        <field name="number1"/>
      </fetch-group>        
      <fetch-group name="fetchGroup2" post-load="true">
        <field name="number2"/>
      </fetch-group>        
    </class>
  </package>
</jdo>

