Κοινοβουλευτική Συνέλευση Ίσης Εκπροσώπησης αδρανοποίησης και Table_Per_class κληρονομιά

ψήφοι
0

Έχω μια οντότητα που είναι σούπερ κλάση

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Table(name = super_class)
public abstract class SuperClass implements Serializable {
    @Transient
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private long id;

    public abstract void initDefaultValues();

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

}

και κάποιες υποκατηγορίες που παρατείνει την υπερκλάση.

@Entity
@Table(name = Subclass1)
public class Subclass1 extends SuperClass{

    private static final Logger log = LogManager
            .getLogger(Subclass1.class);
    @Transient
    private static final long serialVersionUID = 1L;

    // testcase configuration tab
    private String configurationTabTestServer;


    private String umtsRelease;


}

Οι άλλες τάξεις φαίνονται το ίδιο.

Θα χρησιμοποιηθεί για να έχουν τα SINGLE_TABLE για τον τύπο κληρονομικότητας αλλά θέλαμε κάθε συγκεκριμένη κατηγορία να έχει κάθε δικό του πίνακα. Λόγω της TABLE_PER_CLASS θα έπρεπε να χρησιμοποιήσει GenerationType.TABLE.

Έχω επίσης μια κατηγορία οντότητα που έχει ένα ξένο κλειδί στο σούπερ κλάση

@Entity
@Table(name=myother_entity)
class Entity1{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @OneToOne(cascade = CascadeType.ALL)
    private SuperClass superclass;
    //more fields
}

Χρησιμοποίησα μια αφηρημένη κατηγορία, επειδή έχω μία τάξη Entity1 που θα μπορούσε να έχει διαφορετικό τύπο Υπερκλάση. Δεν θέλαμε να δημιουργήσουμε διαφορετικές Entity1 και Entity2 και φορέας3 κλπ μαθήματα για κάθε υποκατηγορία. Έτσι δημιουργήσαμε ένα Entity1 τάξη που μπορεί να έχει ένα πεδίο τύπου υπερκλάση, που θα μπορούσαν να υποδηλώνουν κάποια από τις υποκατηγορίες.

Στο πρόγραμμά μου να δημιουργήσω πολλά intances Entity1 που μερικοί απ 'αυτούς που έχουν διαφορετικό τύπο της υπερ ως τιμή του πεδίου. Κάθε μπορούσε να είναι τύπου subclass1 ή subclass2 κλπ Αρχικά θα χρησιμοποιηθούν για να έχουν ένα ενιαίο πίνακα για όλες τις υποκατηγορίες. Όλα πήγαν καλά. Αλλά μετά αποφασίσαμε να χωρίσει τραπέζια μας, αυτό είναι ό, τι συμβαίνει. Όταν επεξεργάζεστε κάθε περίπτωση Entity1, που έχει ήδη υπερκλάση σύνολο τομέα (χρησιμοποιώντας μία από τις υποκατηγορίες), και να το αποθηκεύσετε (συγχώνευση αυτό) τότε δημιουργεί ένα νέο παράδειγμα της Υποκατηγορία μου που σχετίζονται με Entity1 παράδειγμα μου, και στη συνέχεια αποθηκεύει στο βάση δεδομένων. Έτσι έχω δύο αρχεία τώρα στο τραπέζι της υποκατηγορίας. Αυτό δεν συνέβη, όταν χρησιμοποιείται ένα SINGLE_TABLE τύπο κληρονομικότητας. Αυτή είναι η φυσιολογική συμπεριφορά για την Κοινοβουλευτική Συνέλευση Ίσης Εκπροσώπησης και αδρανοποίησης;

Δημοσιεύθηκε 03/08/2015 στις 15:29
χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
0

Παρακαλούμε, πρώτα σκεφτείτε το εξής: DiscriminatorColumn και DiscriminatorValue σχόλια είναι ειδικά για ενιαίο πίνακα προσέγγιση. Έτσι, δεν πρέπει να χρησιμοποιούνται στον πίνακα ανά κατηγορία αντιστοιχίσεις.

Τώρα, ας πάμε στο θέμα:

Σε χαρτογράφηση πίνακα ανά κατηγορία, θα υπάρχουν δύο αρχεία με το ίδιο ID: ένα σε ένα γονέα πίνακα, άλλες σε έναν πίνακα παιδί.

Όπως κατάλαβα, στην περίπτωσή σας, δύο εγγραφές που γράφονται στον πίνακα παιδί, έτσι δεν είναι; Αν ναι, το πρόβλημα θα πρέπει να είναι κατά τη φόρτωση των δεδομένων Entity1 από τη βάση δεδομένων. Το ακίνητο «υπερκλάση» πρέπει να έχει οριστεί αναγνωριστικό του. Μπορείτε να χρησιμοποιήσετε πρόθυμοι ή τεμπέλης φόρτωσης για αυτό. Και ελέγξτε αν το ακίνητο έχει τοποθετηθεί σωστά (σε κατάσταση εντοπισμού σφαλμάτων) με τη σωστή σειρά ταυτότητα του πριν το αποθηκεύσετε.

Ένας άλλος τρόπος είναι να απενεργοποιήσετε «καταρράκτη επιμένουν / συγχώνευση» και να αποθηκεύσετε τις οντότητες ξεχωριστά. Μπορεί να προσφέρει μεγαλύτερη ασφάλεια στα δεδομένα σας.

Μπορείτε να βρείτε περισσότερες πληροφορίες εδώ: http://docs.oracle.com/javaee/6/tutorial/doc/bnbqn.html

Απαντήθηκε 03/08/2015 στις 16:01
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more