31. marts 2004 - 22:50Der er
47 kommentarer og 1 løsning
Indsættelse af relationsdata i et mange-til-mange forhold
Jeg har to entiteter der har følgende forhold:
File *-----* Info (altså mange til mange)
Dette er løst fint nok med CMP og CMR og jeg kan sagtens få de data ud der er i de to entiteter (tre tabeller).
Men de data har indtil videre været sat ind manuelt i databasen. Nu vil jeg gerne have det til at foregå via entiterne i stedet. Som det er nu kan jeg kun arbejde med en collection på hver side af relationen. Men hvad nu hvis jeg gerne bare vil tilføje en enkelt Info til min File? Kan jeg det?
Jeg har forsøgt at lave en Collection af Info og giver den til File ved hjælp af file.setInfos(collection). Men det giver følgende fejl:
WARN [TxConnectionManager] Prepare called on a local tx. Use of local transactions on a jta transaction with more than one branch may result in inconsistent data in some cases of failure.
Puh ha, det var mange ting. Spørg hvis jeg skal uddybe.
Nej, dagen efter gav den ikke den fejlmeddelse igen. Men jeg kan stadigvæk ikke finde ud af at indsætte data i relationstabellen via CMP/CMR.
Min midligertidige løsning er at gøre det i hånden (JDBC).
arne_v: Jeg har kigget dit eksempel på CMR igennem og der har du mange til mange relationer. Du har lagt data direkte ind i tabellerne. Men ved du hvordan man gør det ved hjælp af ens entity beans?
På en skala fra 00 til 13 står den add metode naturligvis til -10 i brugervenlighed (der skal naturligvis kun angives navne og ikke id'er som argumenter !).
Men teknikken inde i add metoden er god nok og det er det I leder efter.
get collection add bean til collection set collection
Jeg kigger på det i løbet af dagen. Nu skal jeg først lige få min computer til opføre sig pænt (Får nogle spøjse fejl når jeg compiler noget java kode. Den siger at der ikke findes nogle metode der hedder keys() i en HashMap??? Har prøvet med både blackdown linux j2sdk1.4.2 og sun's j2sdk1.5.0beta).
Jeg har prøvet dit eksempel (som minder utroligt meget om det jeg selv har prøvet, med undtagelse af at du starter med at få collection fra entiteten og ikke laver en ny collection).
Det duer ikke. Den opretter data i de enkelte entiteter men ikke i selve relationen. Og jeg får igen den der fejl jeg beskrev i spørgsmålet. Jeg vil lige prøve at ændre det til det du sagde. Hvad skal jeg gøre? Hvad betyder xa-datasource og hvor kan jeg læse om det jeg skal gøre?
Hvilken database ? Hvis jeg husker rigtigt at det er MySQL - MyISAM eller InnoDB tabeller ? Hvis MS SQLServer eller MySQL med InnoDB tabeller - er der defineret foreign key constraints ?
Nej. Min procedure var åbenbart ikke detaljeret nok:
- create File - hent Collection fra File - løkke - kontroller om der findes en info med getByPrimaryKey() - Hvis ikke så create Info - tilføj Info til Collection - set Collection
WARN [TxConnectionManager] Prepare called on a local tx. Use of local transactions on a jta transaction with more than one branch may result in inconsistent data in some cases of failure.
Det skal siges at vi helst vil køre jboss4, da den har en opgraderet version af AXIS, som tilbyder at overføre javabeans med hashtables(maps) og arrays tilknyttet.
Og hvis du undrer dig over hvorfor der ikke kom nogen fejl, så tror jeg at JBoss har gemt relationerne - bare i den in memory HSQLDB database som er default datasource.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.