Query Many to Many Mapping
Thanks for looking at my question.
How do I write a query to find values in a many to many relationship?
My tables are normalized similarly to this:
http://download.oracle.com/docs/cd/B25221_05/web.1013/b13593/relmapun008.htm#CHDFDIHC
How can i write a query for 'Jane Smith' that would return all of the projects ('Java Developer', 'Magazine') he is working on? Or, vise versa a query for a project that would return all of the employees mapped to it by the relationship table?
Edited by: 869021 on Jun 28, 2011 4:00 PM
Thanks for the reply. I think it is a little beyond me. I am four weeks into a beginning Data modeling class. I will definitely come back and look at it again later.
I came up with this solution. Just nesting selects until I can query across the relationships.
DROP TABLE Stock;
DROP TABLE Model;
DROP TABLE Dealer;
CREATE TABLE Dealer(
DealerID NUMBER,
DealerName VARCHAR2(20),
CONSTRAINT pk_Dealership PRIMARY KEY (DealerID)
CREATE TABLE Model(
ModelNumber NUMBER,
ModelName VARCHAR2(20),
CONSTRAINT pk_Model PRIMARY KEY (ModelNumber)
CREATE TABLE Stock(
StockKey NUMBER,
ModelNumber NUMBER,
DealerID NUMBER,
CONSTRAINT pk_Stock PRIMARY KEY (StockKey),
CONSTRAINT fk_ModelNumber FOREIGN KEY (ModelNumber) REFERENCES Model (ModelNumber),
CONSTRAINT fk_DealerID FOREIGN KEY (DealerID) REFERENCES Dealer (DealerID)
INSERT INTO Dealer VALUES(1, 'Midnight Movers');
INSERT INTO Dealer VALUES(2, 'Bubbas Imports');
INSERT INTO Dealer VALUES(3, 'Import Motors');
INSERT INTO Model VALUES(1, 'Buick Skylark');
INSERT INTO Model VALUES(2, 'H2 Hummer');
INSERT INTO Model VALUES(3, 'Chevy Suburban');
INSERT INTO Model VALUES(4, 'BMW Z3');
INSERT INTO Model VALUES(5, 'BMW 328i');
INSERT INTO Model VALUES(6, 'Jeep Wrangler');
INSERT INTO Model VALUES(7, 'Ford Focus');
INSERT INTO Model VALUES(8, 'Range Rover');
INSERT INTO Model VALUES(9, 'Toyota Supera');
INSERT INTO Model VALUES(10, 'Ferrari Testarosa');
INSERT INTO Model VALUES(11, 'Jaguar X12');
INSERT INTO Model VALUES(12, 'Ford Fairmont');
INSERT INTO Stock VALUES(1, 1, 1);
INSERT INTO Stock VALUES(2, 2, 1);
INSERT INTO Stock VALUES(3, 3, 1);
INSERT INTO Stock VALUES(4, 4, 1);
INSERT INTO Stock VALUES(5, 5, 1);
INSERT INTO Stock VALUES(6, 6, 1);
INSERT INTO Stock VALUES(7, 1, 2);
INSERT INTO Stock VALUES(8, 2, 2);
INSERT INTO Stock VALUES(9, 1, 2);
INSERT INTO Stock VALUES(10, 4, 2);
INSERT INTO Stock VALUES(11, 5, 2);
INSERT INTO Stock VALUES(12, 6, 2);
INSERT INTO Stock VALUES(13, 7, 3);
INSERT INTO Stock VALUES(14, 8, 3);
INSERT INTO Stock VALUES(15, 9, 3);
INSERT INTO Stock VALUES(16, 10, 3);
INSERT INTO Stock VALUES(17, 11, 3);
INSERT INTO Stock VALUES(18, 12, 3);
--find all stock at Import Motors
SELECT * FROM Model
WHERE ModelNumber IN
(SELECT DISTINCT Stock.ModelNumber
FROM Stock WHERE Stock.DealerID = (
SELECT Dealer.DealerID
FROM Dealer WHERE Dealer.DealerName = 'Import Motors'
--find all dealers with BMW Z3
SELECT * FROM Dealer
WHERE DealerID IN
(SELECT DISTINCT Stock.DealerID
FROM Stock WHERE Stock.ModelNumber = (
SELECT Model.ModelNumber
FROM Model WHERE Model.ModelName = 'BMW Z3'
);
Similar Messages
-
OLAP issue with MANY TO MANY mapping
Hi All,
We have a requirement where we have to pull specific measures & associated dimensions data from an OLAP to SQL tables. The source cube has almost 80 % of MANY TO MANY mappings.
When we pull this data to SQL tables either by writing MDX or DMX dimension level metric values are not matching with what OLAP browsing is providing.
When we pull this measure with only regular dimensions metric values with all dimensions exactly match. The mismatch issue comes when we have at least 1 MANY TO MANY dimension part of MDX or DMX query. Further to this we have pulled all intermediate facts
& dimensions involved in MANY TO MANY mapping into SQL tables & tried a number of JOINS but the metric values haven’t match up.
We are very close on delivery dates & are not sure on any resolution. Could you please guide us on next steps here.
Thanks is advance.Hi All,
We have a requirement where we have to pull specific measures & associated dimensions data from an OLAP to SQL tables. The source cube has almost 80 % of MANY TO MANY mappings.
When we pull this data to SQL tables either by writing MDX or DMX dimension level metric values are not matching with what OLAP browsing is providing.
When we pull this measure with only regular dimensions metric values with all dimensions exactly match. The mismatch issue comes when we have at least 1 MANY TO MANY dimension part of MDX or DMX query. Further to this we have pulled all intermediate facts
& dimensions involved in MANY TO MANY mapping into SQL tables & tried a number of JOINS but the metric values haven’t match up.
We are very close on delivery dates & are not sure on any resolution. Could you please guide us on next steps here.
Thanks is advance. -
Filter a Many-to-Many query in Hibernate
I'm working with Hibernate and I'm in trouble with some "simple SQL" query, but no a simple HQL query -for me.
I have what you should think a one-to-many relationship, Person and PhoneNumber. For misterious reasons that I don't know somebody build a Many-to-Many relation.
I build my HBM mapping file for Person and PhoneNumber with a simple "Person -> many-to-many property".
What I've to do now is filter the Person list by some PhoneNumber.
like
StringBuilder sb = new StringBuilder( );
sb.append( "from Person p " );
sb.append( "join p.pnumbers number " );
//HELP HERE
Query query = session.createQuery( sb.toString( ) );
List list = query.list( );In old style SQL the query could be like this:
SELECT P.*
FROM PERSON,
(SELECT * FROM PHONENUMBER PN WHERE PN.NUMBER IN (1,2,3,4,5)) N
WHERE P.ID = PN.PERSON_IDAnyone knows how to make that H-query ?If I have understood your query correctly you have a custom entity, lets say A which has many to many relationship with both account and contact. And you want to have say a sub-grid of custom entity A on contact form where Custom Entity A is associated with
Contact's parent account.
This can not be handled OOB as per best of my knowledge. You may have to write a code to achieve that.
http://missdynamicscrm.blogspot.in/2014/08/crm-2013-using-addcustomfilter-to-get-filtered-lookup-field-based-on-linked-entity.html
Hope it helps!
Regards, Abhishek Bakshi If you find this post helpful then please Vote as Helpful and Mark As Answer. Check my blog on https://mydynamicscrmblog.wordpress.com/ -
Unable to create report. Query produced too many results
Hi All,
Does someone knows how to avoid the message "Unable to create report. Query produced too many results" in Grid Report Type in PerformancePoint 2010. When the mdx query returns large amount of data, this message appears. Is there a way to get all
the large amount in the grid anyway?
I have set the data Source query time-out under Central Administration - Manager Service applications - PerformancePoint Service Application - PerformancePoint Service Application Settings at 3600 seconds.
Here Event Viewer log error at the server:
1. An exception occurred while running a report. The following details may help you to diagnose the problem:
Error Message: Unable to create report. Query produced too many results.
<br>
<br>
Contact the administrator for more details.
Dashboard Name:
Dashboard Item name:
Report Location: {3592a959-7c50-0d1d-9185-361d2bd5428b}
Request Duration: 6,220.93 ms
User: INTRANET\spsdshadmin
Parameters:
Exception Message: Unable to create report. Query produced too many results.
Inner Exception Message:
Stack Trace: at Microsoft.PerformancePoint.Scorecards.Server.PmServer.ExecuteAnalyticReportWithParameters(RepositoryLocation analyticReportViewLocation, BIDataContainer biDataContainer)
at Microsoft.PerformancePoint.Analytics.ServerRendering.OLAPBase.OlapViewBaseControl.ExtractReportViewData()
at Microsoft.PerformancePoint.Analytics.ServerRendering.OLAPBase.OlapViewBaseControl.CreateRenderedView(StringBuilder sd)
at Microsoft.PerformancePoint.Scorecards.ServerRendering.NavigableControl.RenderControl(HtmlTextWriter writer)
PerformancePoint Services error code 20604.
2. Unable to create report. Query produced too many results.
Microsoft.PerformancePoint.Scorecards.BpmException: Unable to create report. Query produced too many results.
at Microsoft.PerformancePoint.Scorecards.Server.Analytics.AnalyticQueryManager.ExecuteReport(AnalyticReportState reportState, DataSource dataSource)
at Microsoft.PerformancePoint.Scorecards.Server.PmServer.ExecuteAnalyticReportBase(RepositoryLocation analyticReportViewLocation, BIDataContainer biDataContainer, String formattingDimensionName)
at Microsoft.PerformancePoint.Scorecards.Server.PmServer.ExecuteAnalyticReportWithParameters(RepositoryLocation analyticReportViewLocation, BIDataContainer biDataContainer)
PerformancePoint Services error code 20605.
Thanks in advance for your help.Hello,
I would like you to try the following to adjust your readerquotas.
Change the values of the parameters listed below to a larger value. We recommend that you double the value and then run the query to check whether the issue is resolved. To do this, follow these steps:
On the SharePoint 2010 server, open the Web.config file. The file is located in the following folder:
\Program Files\Microsoft Office Servers\14.0\Web Services\PpsMonitoringServer\
Locate and change the the below values from 8192 to 16384.
Open the Client.config file. The file is located in the following folder:
\Program Files\Microsoft Office Servers\14.0\WebClients\PpsMonitoringServer\
Locate and change the below values from 8192 to 16384.
After you have made the changes, restart Internet Information Services (IIS) on the SharePoint 2010 server.
<readerQuotas
maxStringContentLength="2147483647"
maxNameTableCharCount="2147483647"
maxBytesPerRead="2147483647"
maxArrayLength="2147483647"
maxDepth="2147483647"
/>
Thanks
Heidi Tr - MSFT
Please remember to click “Mark as Answer” on the post that helps you, and to click “Unmark as Answer” if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread. -
Hibernate - Spring - problem with mapping (many-to-many)
Hello,
I want to map the following situation. I have a table called EDUCATION and a table called SCHOOLS. Between those tables I have an associative table called EDUCATION_SCHOOLS. The (usefull) fields:
EDUCATION:
id (long) - PK
name (varchar)
versionNr (long)
SCHOOLS:
id (long) - PK
name (varchar)
versionNr (long)
EDUCATION_SCHOOLS:
id (long) - PK
education_id (long) (FK to EDUCATION.id)
school_id (long) (FK to SCHOOLS.id)
name (varchar)
versionNr (long)
Their is a Unique Constraint between EDUCATION_SCHOOLS.education_id and EDUCATION_SCHOOLS.school_id.
What I want to be able to do:
EDUCATION: select, update, insert
SCHOOLS: select, update, insert
EDUCATION_SCHOOLS: select, update (only the non-FK fields), insert
I never want to delete anything in those tables. (and it's never ever going to be an option either)
Hibernate version:
Hibernate-Version: 3.0.5
Mapping documents:
Education:
<hibernate-mapping>
<class name="##.Education" table="EDUCATION">
<id name="id" column="ID" type="java.lang.Long">
<generator class="sequence">
<param name="sequence">EDUCATION_SEQ</param>
</generator>
</id>
<version name="versionNr" column="VERSIONNR" type="long"/>
<property name="name" column="NAME" type="string" />
<set name="SCHOOLS" table="EDUCATION_SCHOOLS">
<key column="EDUCATION_ID" />
<many-to-many class="##.Schools" column="SCHOOL_ID" lazy="false" />
</set>
</hibernate-mapping>
Schools:
<hibernate-mapping>
<class name="##.Schools" table="SCHOOLS">
<id name="id" column="ID" type="java.lang.Long">
<generator class="sequence">
<param name="sequence">SCHOOLS_SEQ</param>
</generator>
</id>
<version name="versionNr" column="VERSIONNR" type="long"/>
<property name="name" column="NAAM_NAME" type="string" />
<set name="educations" table="EDUCATION_SCHOOLS" inverse="true" cascade="none">
<key column="SCHOOL_ID" />
<many-to-many class="##.Schools" column="SCHOOL_ID" lazy="proxy"/>
</set>
</hibernate-mapping>
Education_schools:
<hibernate-mapping>
<class name="##.EducationSchools" table="EDUCATION_SCHOOLS">
<id name="id" column="ID" type="java.lang.Long" unsaved-value="0">
<generator class="sequence">
<param name="sequence">SEQ_EDUCATION_SCHOOLS</param>
</generator>
</id>
<version name="versionNr" column="VERSIONNR" type="long" />
<many-to-one name="education" class="##.Education" cascade="none" lazy="proxy"
column="EDUCATION_ID" not-null="true"/>
<many-to-one name="schools" class="##.Schools" cascade="none" lazy="proxy"
column="SCHOOL_ID" not-null="true"/>
</hibernate-mapping>
Name and version of the database you are using:
Oracle XE 10g
I am able to:
EDUCATION: select, insert, update
SCHOOLS: select, insert, update
EDUCATION_SCHOOLS: select
Problems:
EDUCATION_SCHOOLS: when I try to insert, I sometimes get unique constraint violations. (when I should get them, thus I'm trying to insert something that already exists .. but how do I stop Hibernate from Inserting?)
EDUCATION_SCHOOLS: when I try to update, sometimes it works, but often I get:
23:03:55,484 [http-8081-1] ERROR be.vlaanderen.lne.vea.epb.ui.struts.EpbExceptionHandler - org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException: Object of class [##.EducationSchools] with identifier [null]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [##.EducationSchools#<null>]
ex.getMessage() Object of class [##.EducationSchools] with identifier [null]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [##.EducationSchools#<null>]
org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException: Object of class [##.EducationSchools] with identifier [null]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [##.EducationSchools#<null>]
Caused by: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect):As you can see from the stacktrace I use Spring for the transactionManager: org.springframework.orm.hibernate3.HibernateTransactionManager in which I use e sessionFactory: org.springframework.orm.hibernate3.LocalSessionFactoryBean
In my DAO, I try to save with the regular this.getHibernateTemplate().saveOrUpdate that has always worked for me.
Another problem I have:
when i update "name" in EDUCATION, the records with that ID are delete from EDUCATION_SCHOOLS ...
As I am experiencing 3 different problems, I'm pretty sure something is wrong in the mapping files .. however I fail to find out what .. Any input would be greatly appreciated.
(I translated some class/table-names, that's what the ## cause)
Edited by: Bart_Blommaerts on Jul 29, 2008 11:53 PMThank you for your input.
When I try what you suggest, I still get the same error:
16:39:30,406 [http-8081-1] ERROR ###.EpbExceptionHandler - org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException: Object of class [###.EducationSchools] with identifier [2]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [###.EducationSchools#2]
ex.getMessage() Object of class [###.EducationSchools] with identifier [2]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [###.EducationSchools#2]
org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException: Object of class [###.EducationSchools] with identifier [2]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [###.EducationSchools#2]
Caused by: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [###.EducationSchools#2]If you had to map the database tables, I'm trying to map, how would you do it? -
Many to many relationship mapping.
Hi
I have a basic question on how to create a good java class model (POJOs) based on the database model.
I Have to follwing tables
Table1 with columns as
ID1
name
description
Table2 with columns as
ID2
dateCreated ..etc.
Since there is a many to many relationship between table1 and table2
So to map that we have a table3 with columns
ID3
ID1 // fk table1
ID2 // fk table2
browserName
startTime
endTime
So when I create Java classes:
// corresponding to table 1
Class MyTable1
private Integer ID1;
private List ID2; // to map with the table2
// corresponding to table 2
Class MyTable2
private Integer ID2
private List ID1; // to map with table 1
In this way I can create my classes. Is this the best way to put it together.
And where to put the attributed specific to table3. Like the BrowserName and the StartTime and the EndTime.
Any suggestion please.
Thanks.Your names leave a lot to be desired. Let's start with an example. Suppose I have a problem involving employees and the tasks assigned to them. An employee may have any number of tasks assigned to them and a task can be assigned to any number of employees. The assignment itself has more attributes: when it was assigned, its priority and so on.
public interface Employee {
Long getId(); //etc...
Set<Assignment> getAssignments();
void setAssignments(Set<Assignment> assignments);
public interface Task {
Long getId(); //etc...
Set<Assignment> getAssignments();
void setAssignments(Set<Assignment> assignments);
public interface Assignment {
Long getId(); //etc...
Employee getEmployee();
void setEmployee(Employee employee);
Task getTask();
void setTask(Task task);
}This assumes you want to navigate in all directions: from an employee to their assignments, from a task to its assignments and from an assignment to it employee and task. -
Hi,
I'm working with two classes Car and Customer. The Car class has a Vector of Customers and the Customer class has a Vector of Car. Both are related by a many to many mapping.
I have noticed that I have to set one of the vector to read only to avoid the error message "More than one writable many-to-many mapping can not use the same relation table" in the mapping workbench.
I can understand that but is there a way to work around, I mean to be able to add a car to a customer and add a customer to a car with the both vectors?
Is there something to do with the cache?
I use Vector for the collection or Map class, have I to do otherwise?Hello Vladislav, I understand your first question in this thread, but I'm not sure I follow the rest, so let me respond to your first post:
"I have noticed that I have to set one of the vector to read only to avoid the error message "More than one writable many-to-many mapping can not use the same relation table" in the mapping workbench.
I can understand that but is there a way to work around, I mean to be able to add a car to a customer and add a customer to a car with the both vectors?"
The issue here is that with a Many to Many mapping the mapping is responsible for writing to the association table. So, you have a "CAR_CUST" association table. Imagine you add a Car "101" to a customer "501" and the requisite customer "501" to that car "101" in your object model. Then the association table should only be updated once, with an entry of "101, 501". But since the M-M is mapped in both directions, you need to tell TopLink which of these to consider as the "master" when updating the database.
If you didn't make one of the M-M mappings "read only", then TopLink would insert "101, 501" twice in the association table, and then at a later date you would see that the customer 501 had two 101 cars!
We do have a feature that allows for TopLink to maintain bidirectional relationships such that if you add or remove a target from one relationship, TopLink will automatically add/remove it from the opposite direction. In my opinion this is lazy programming! A good Java developer should insist on keeping his model up to date on his own. This feature was added because it's part of the EJB spec, not necessarily because it's a good idea ;)
- Don
Is there something to do with the cache?
I use Vector for the collection or Map class, have I to do otherwise? -
Problem in mapping a many to many relation to a list
Hi,
I have a problem with mapping a many to many relation to a list.
I have a Many to Many relation in my database between tables baskets and products. This relation is implemented with a join table basket_products, which has two fields which correspond to the foreign keys to tables baskets and products. The join table need to have another one column "order", which defines the order of the products for the specific basket.
In my mapping I have:
@Entity
@Table(name = "baskets", uniqueConstraints = {})
public class Components implements java.io.Serializable {
@ManyToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
@JoinTable( name="baskets_products",
joinColumns=@JoinColumn(name="b_id", referencedColumnName="pr_id"),
inverseJoinColumns=@JoinColumn(name="pr_id", referencedColumnName="pr_id"))
//This of course doesn't work!!
//@OrderBy(value="order")
public List<Products> getProductses() {
return this.productses;
public void setProductses(
List<Products> productses) {
this.productses = productses;
@Entity
@Table(name = "products", uniqueConstraints = { })
public class Products implements java.io.Serializable {
@ManyToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "productses")
public Set<Baskets> getBasketses() {
return this.basketses;
public void setBasketses(Set<Basket> basketses) {
this.basketses = basketses;
}In the EJB spec I read that :
"The property or field name must correspond to that of a persistent property or field of the associated
class."
What to do if I want to use a field from the join table to do the ordering of the list??
My problem is that the field "order", is not defined to the EJB container as a persistent field, so it cannot be used. But for my needs it is necessary that this field is included in the join table.
I thought that I could use the secondary table annotation to map the join table to the Baskets class, as well, so that I can define the order field, but this solution seems to me as a really wrong one.
Can anyone help me??
Thanks,
Elenh.Hi Martin-
Can you please help me. Here are the details:
We have created an AQ in Oracle DB which will have the following message Structure:
CREATE OR REPLACE TYPE enqueue_payload AS OBJECT
( field1 VARCHAR2(100),
field2 VARCHAR2(100),
field3 DATE,
field4 VARCHAR2(100),
field5 NUMBER,
payload CLOB,
In the Payload field we are enqueing an XML message.
We have to use a OSB proxy service to dequeue the message from the AQ, transform it to another format and send to a SOA Composite.
We created a AQ Adapter in Jdeveloper 11g and imported the WSDL, XSD and .jca jca binding file into the OSB project. And configured the OSB proxy service using the WSDL imported.
However in OSB proxy service message flow when I try to create an XQUERY transformation, I see that the Payload field does not expose the structure of the XML message that is being enqueued. I even changed the message structure definition to have the payload field as XMLType. But it didn't help.
On analyzing the XSD created by AQ Adapter, I see that the payload is being defined as "string" in the XSD.
Inputs Needed
=========
1. How can we parse the payload field defined as CLOB/XMLType in OSB so that I can see the structure of the XML message it holds ?
2. Is there any in-built function in OSB to convert it to XML ?
3. Any other inputs in order to transform the XML message coming in the payload field as CLOB/XMLType
Please provide your inputs and I hope that I have clearly explained my use case.
Thanks in advance for your time and help!!
Regards,
Dibya -
Mapping issue, "many to many" mapping
Hi specialists!
I have to map this structure:
source
segment_1 (1...n)
key_1
aaa
bbb
segment_2 (1...n)
key_2
ccc
ddd
Target:
segment_2
ccc
ddd
The condition is segment_1=>key1 = segment_2=>key2
The problem is that I need to check each segment_1 with each segment_2.
Is it possible using standard mapping functions?Dani_K,
This can be done with standard mapping if your source.segment_1.key_1 is unique. If it is not, you could end up with a many to many mapping which would be difficult no matter how you map.
Try this:
For segment_2
source.segment_1.key_1 (right click, context, source) ---> sort --->
source.segment_2.key_2 (right click, context, source) ---> sort --->
equalsS ---> ifWithoutElse --->
source.segment_2 (then)
removeContexts (after the If Then)---> target.segment_2
For ccc
source.segment_1.key_1 (right click, context, source) ---> sort --->
source.segment_2.key_2 (right click, context, source) ---> sort --->
equalsS ---> ifWithoutElse --->
source.segment_1.ccc (right click, context, source) (then)
removeContexts (after the If Then)---> SplitByValue(Each Value) ---> target.segment_2.ccc
For ddd
source.segment_1.key_1 (right click, context, source) ---> sort --->
source.segment_2.key_2 (right click, context, source) ---> sort --->
equalsS ---> ifWithoutElse --->
source.segment_1.ddd (right click, context, source) (then)
removeContexts (after the If Then)---> SplitByValue(Each Value) ---> target.segment_2.ddd
Ideally, the segment_1.Key_1 and segment_2.key_2 are sorted before you process the message. If so, remove the sort above. -
Toplink - Many-to-Many Mapping issue
Hi
I have the following tables
User
Place
Team
User : uid , name (where uid is primay key)
Place : uid , pid( where uid and pid are composite primary keys)
Team : tid , name , pid( where tid is primary key)
Here the following mappings :
one user is belongs to many places
one user have many teams( by place)
user have many teams
i have created many to many mapping between place(or user) and team tables using intermediate table user_team( uid ,tid). But when i try to retrieve the teams for user id then i m getting all the teams. Here i need to filter the teams by only place id instead getting all the teams.
For example:
if user id is belongs to place id 101 then i need to get only teams belongs to place id 101. But i m getting all the places(101,102) teams for same user id which belongs to place id 101.
Please help me out how i can create valide mapping between all the tables to retrieve valid data. i m using toplink workbench(10g - 9.0.4).Your model seems confused, you may wish to re-think you model. It seems odd that a place would have a user id, seems more like it is a m-m join table between user and team, but then it should have a team id not a place id.
You can use a selectionCriteria() on a ManyToManyMapping to define complicated m-m joins, but you would probably be better re-thinking your model. What object model are you trying to do exactly? Go from there, then define your data-model.
-- James : http://www.eclipselink.org -
Hi Experts,
I am currently facing issue with many to one mapping . I have a source schema called revenue having Profit and Profit GST which is looping multiple times. I need to copy the name,value and GST value for each type into the destination schema.
i am using Looping funtiod to create item profit records and than copying name and value from source to destination but the problem statement is that i am unable to map the GST value
Thanks
Abhishekcould you post the schema definition please
well why i am asking is, in General matching the records will be based on common node values in corresponding records.
Assume you have 2 records of Profit and 2 records of ProfitGST in the source message like below, you cannot match the records unless you have some value common in both the records. i mean there should be some common node or attribute value that exits in
both records.
assume the following sample with 2 records each
<ns0:Revenue xmlns:ns0="http://TestSample">
<ns0:profit availabilityIncentivePayment="342" increasedCapacityCharge ="121" increasedCapacaityPayment="231" />
<ns0:profit availabilityIncentivePayment="100" increasedCapacityCharge ="110" increasedCapacaityPayment="120" />
<ns0:profitGST availabilityIncentivePayment="55" increasedCapacityCharge ="21" increasedCapacaityPayment="23"/>
<ns0:profitGST availabilityIncentivePayment="150" increasedCapacityCharge ="160" increasedCapacaityPayment="170"/>
</ns0:Revenue>
if you observe the above sample instance, it does have 2 records each, but Profit record's nodes values
are no where common with ProftGST record's node values.
And for every Profit record, you want to pick corresponding GST value from ProfitGST record. However, since you don't have atleast one common node/attribute value here, you will not find a way to relate corresponding records. Means while mapping the first
record of Profit, it cannot decide which record's nodes values in the ProftGST should pick to match as there are 2 records of ProfitGSt and with no relation with Profit Records.
if the requirement is such that the records should be matched by the order(index) irrespective
or the values in them, then that can be achieved easily with postion() function in the for loop. just try to use code some thing like below sample xslt script like below, apply the proper name spaces and put full names as applicable in your scirpt, mould
it as per your need
<ns0:Root>
<xsl:for-each select="Profit">
<Profit>
<xsl:if test="@availabilityIncentivePayment">
<name>
name>availabilityIncentivePayment</name>
</name>
</xsl:if>
<xsl:if test="@increasedCapacityCharge">
<Value>
<xsl:value-of select="@increasedCapacityCharge" />
</Value>
</xsl:if>
<xsl:if test="../profitGST/@availabilityIncentivePayment">
<ProfitGSt>
<xsl:value-of select="../profitGST/@availabilityIncentivePayment[position()]" />
</ProfitGSt>
</xsl:if>
</Profit>
</xsl:for-each>
</ns0:Root>
Please mark the post as answer if this answers your question. If this post is helpful, please vote as helpful by clicking the upward arrow mark next to my reply. -
Hierarchical query with many-to-many relationship
I have read with interest the creative solutions to complex hierarchical queries posted previously; they have been instructive but have not quite addressed this scenario.
We have a hierarchy table H, with columns for ID, name, parentID, and other attributes.
Within this table are a number of independent hierarchies, each existing for a different purpose.
We have a master list of hierarchies in table T which describes the purpose of each hierarchy, provides some default attributes which the nodes can inherit, and stores a unique id for each hierarchy and a pointer to the root node of the corresponding hierarchy in table H.
We have a master list of items M, with identically named columns to those in H, along with many other attributes.
The members of table M ALL belong to EACH of the Hierarchies. So we have a link table I to define the intersection of H and M.
So the leaf nodes of H are really containers for the list of elements from M which may be attached to them.
The universe of M is very volatile, with new members being added, old ones deleted, and existing ones being reclassified frequently from node to node within each hierarchy. Since the hierarchies have to be built to handle every possible scenario, so that the members of M can always find a suitable node to reside in, quite often, in fact more often than not, the majority of leaf nodes for each hierarchy are empty at any given moment.
Therefore, although we always know the root sector of a given hierarchy and can traverse downwards from there, if we worked our way up from the intersection table, we could eliminate up to 70% of the nodes of any given hierarchy from further consideration, as they don't need to be (in fact, must not be) included in reports.
As implied by the above, rows in M are structurally similar (in terms of columns, but not in any real world sense) and are a superset of rows in H. But combining them into the one table doesn't seem to help the reporting process due to the many-to-many relationship which prevents the ID/parentID relationship from being carried through to this level.
There are a number of other considerations of which the most pertinent is that the people using this database generally have an interest in only a subset of the master list of items in M. This relationship is also dynamic but important enough and rigid enough that another link table P exists to combine the Users in table U with the subset of M in which they are interested. (The users are also grouped into hierarchies of a totally different nature, but this aspect is secondary for now.)
The reporting is reasonably straightforward for any single combination of User and Hierarchy; they want to see all the items they are interested in, listed in hierarchical sequence, totalled on change of level with the individual items M listed beneath the nodes of H. This is unfortunately required in real time, so retrieval performance is paramount.
Some statistics might help to determine the optimum approach:
The largest hierarchy has 10,000 nodes. The smallest about 100.
The largest would have 70% or more of its nodes unused at any point in time, and even the smallest would have 25% unused.
The hierarchies tend to be broad rather than deep, the maximum number of levels being about 5; but the larger ones should be twice as deep as this if performance was not compromised.
There are dozens of hierarchies, but it may be possible to sharply reduce this number by exploiting the Order Siblings By clause.
The number of rows in M varies between 500,000 and 50,000; depending upon how long historical data is retained on-line (and performance permitting, it would be retained indefinitely).
The number of users varies between 1000 and 2000 but the range of M in which they are interested varies greatly; from as few as 100 to as many as 10,000+. So it is almost always worth beginning by eliminating the items in which they are not interested, implying once again that the hierarchy should be traversed upwards rather than down from the root.
The current system is very old and survives by a tactic of building what are essentially materialised views of the database structure for each user overnight using, ahem, non-relational technology. This is inefficient and not easily scaled (but it works) and hence this redevelopment project needs to (a) work, and (b) work better and faster.
I am happy to provide some DDL scripts if that helps explain the problem better than this narrative.
I can't help feeling that the solution lies in somehow extending the hierarchical query past the many-to-many link table so that the Master list can be merged directly into the hierarchy such that the M items become the leaf nodes rather than the design outlined above - but I don't know how to do that. But I am sure everyone reading this does! :)
All advice appreciated. Database version is not an issue; we are currently using version 10XE for experimentation, but production usage could be on 11 if that contains helpful features.
Thank you
CSHi,
ChrisS. wrote:
I am happy to provide some DDL scripts if that helps explain the problem better than this narrative.Yes, please do.
The problem seems interesting, I'm sure many people here (including myself) are willing to help you in this matter.
So yes, post DDL for the tables, as well as INSERTs to populate them with representative data. Please also include the output you require along with detailed explanations about the logic to get it.
Don't forget to put lines of code between {code} tags in order to preserve formatting and readability, like this :
SELECT sysdate FROM dual;Thanks. -
Take2 - Many-to-Many mapping on a single object/table via an external table.
Plaease ignore the previous entry. Finger trouble on the keyboard
accidentally posted prior to completion!
Any takers on this one? If its simple, then great.
I currently have a problem making the correct meta-data via xdoclet for a
collection with a many-to-many mapping between an enhanced class and an
xref table (which does not have an enhanced class associated with it.)
Although page 184 of the Kodo JDO 3.01 Developers guide does spell out in
fairly academic terms what has to be done, it still seems fairly
impenetrable, after much mangling and hacking.
As far as I can see the significantly questionable attributes are:-
element-column.<pk column>*
and
ref-column.<pk column>*
The asterisks and the associated texts indicate that these entries can be
specified more than once.
Here is my Meta data.
* @jdo.field collection-type="collection"
element-type="com.letsys.erespond.business.model.event.Condition"
* @jdo.field-vendor-extension vendor-name="kodo" key="jdbc-field-map"
value="many-many"
* @jdo.field-vendor-extension vendor-name="kodo"
key="jdbc-field-map/table" value="EventConditionConditionXref"
* @jdo.field-vendor-extension vendor-name="kodo"
key="jdbc-field-map/element-column.ID" value="EVENTCONDITIONID"
* @jdo.field-vendor-extension vendor-name="kodo"
key="jdbc-field-map/ref-column.EVENTCONDITIONID" value="ID"
private Collection groupsToConditions;
Here is the basic table which I wish to use for the xref
create table EventConditionConditionXref(
EventConditionId NUMBER(10) NOT NULL primary key,
EventConditionIdGroupTo NUMBER(10) NOT NULL primary key
The EventCondition class and table uses a field 'id' as its primary key.
The intention is the xref table will hold many-many associations between
multiple EventCondition.id instances in the underlying database.
Thus the joing condition would be :
select
EventConditionIdGroupTo
from
EventCondition ec, EventConditionConditionXref ecx
where
ec.id = ecx.EventConditionId
There are numerous variations that I have squeezed through it, but the net
effect has always been
BUILD FAILED
file:C:/dev/projectm/build.xml:303:
kodo.jdbc.meta.MappingInfoNotFoundException: The mapping for fie
ld "com.letsys.erespond.business.model.event.Condition.groupsToConditions"
is missing information on
how to link the fields table to its owning class table, or the given
information is invalid.
I have tried many interpretations as to how
element-column.<pk column>*
and
ref-column.<pk column>*
should be represented, but always with the same 'not enough info' message.
Am I missing something obvious, and/or not understanding something?
Cheers Ed.Ed-
I think what you want is:
@jdo.field collection-type="collection"
element-type="com.letsys.erespond.business.model.event.Condition"
@jdo.field-vendor-extension vendor-name="kodo" key="jdbc-field-map"
value="many-many"
@jdo.field-vendor-extension vendor-name="kodo"
key="jdbc-field-map/table" value="EventConditionConditionXref"
@jdo.field-vendor-extension vendor-name="kodo"
key="jdbc-field-map/ref-column.ID" value="EVENTCONDITIONID"
@jdo.field-vendor-extension vendor-name="kodo"
key="jdbc-field-map/element-column.ID" value="EVENTCONDITIONIDGROUPTO"
Basically, the "ref-column.<primary key>" specifies the column in the
join table that holds the primary key of the source side of the relation
(the current class), and the "element-column.<primary key>" specifies
the column in the join table that holds the primary key of the
destination side of the relation (the content of the Collection field).
Since it appears that you want the relation to be from Condition to
Condition (i.e., have a relation it itself), the primary key in both
cases will be the 'ID' column.
Let us know if you still have problems with this. You might want to
check out our graphical mapping workbench in 3.1, which helps greatly
simplify composing your mappings.
In article <[email protected]>, Ed Bett wrote:
Plaease ignore the previous entry. Finger trouble on the keyboard
accidentally posted prior to completion!
Any takers on this one? If its simple, then great.
I currently have a problem making the correct meta-data via xdoclet for a
collection with a many-to-many mapping between an enhanced class and an
xref table (which does not have an enhanced class associated with it.)
Although page 184 of the Kodo JDO 3.01 Developers guide does spell out in
fairly academic terms what has to be done, it still seems fairly
impenetrable, after much mangling and hacking.
As far as I can see the significantly questionable attributes are:-
element-column.<pk column>*
and
ref-column.<pk column>*
The asterisks and the associated texts indicate that these entries can be
specified more than once.
Here is my Meta data.
* @jdo.field collection-type="collection"
element-type="com.letsys.erespond.business.model.event.Condition"
* @jdo.field-vendor-extension vendor-name="kodo" key="jdbc-field-map"
value="many-many"
* @jdo.field-vendor-extension vendor-name="kodo"
key="jdbc-field-map/table" value="EventConditionConditionXref"
* @jdo.field-vendor-extension vendor-name="kodo"
key="jdbc-field-map/element-column.ID" value="EVENTCONDITIONID"
* @jdo.field-vendor-extension vendor-name="kodo"
key="jdbc-field-map/ref-column.EVENTCONDITIONID" value="ID"
private Collection groupsToConditions;
Here is the basic table which I wish to use for the xref
create table EventConditionConditionXref(
EventConditionId NUMBER(10) NOT NULL primary key,
EventConditionIdGroupTo NUMBER(10) NOT NULL primary key
The EventCondition class and table uses a field 'id' as its primary key.
The intention is the xref table will hold many-many associations between
multiple EventCondition.id instances in the underlying database.
Thus the joing condition would be :
select
EventConditionIdGroupTo
from
EventCondition ec, EventConditionConditionXref ecx
where
ec.id = ecx.EventConditionId
There are numerous variations that I have squeezed through it, but the net
effect has always been
BUILD FAILED
file:C:/dev/projectm/build.xml:303:
kodo.jdbc.meta.MappingInfoNotFoundException: The mapping for fie
ld "com.letsys.erespond.business.model.event.Condition.groupsToConditions"
is missing information on
how to link the fields table to its owning class table, or the given
information is invalid.
I have tried many interpretations as to how
element-column.<pk column>*
and
ref-column.<pk column>*
should be represented, but always with the same 'not enough info' message.
Am I missing something obvious, and/or not understanding something?
Cheers Ed.
Marc Prud'hommeaux [email protected]
SolarMetric Inc. http://www.solarmetric.com -
Valueholderinterface - Many-to-Many mapping problem
Hi
i have two tables users and teams and i have created many-to-many relationship between two table through intermediated(users_teams) table. Here user can have many teams and team can have many users.But the following exception i m getting while getting teams from user and users from team.
Caused by: Exception [TOPLINK-0] (OracleAS TopLink - 10g (9.0.4.2) (Build 040311
)): oracle.toplink.exceptions.IntegrityException
Descriptor Exceptions:
Exception [TOPLINK-2] (OracleAS TopLink - 10g (9.0.4.2) (Build 040311)): oracle.
toplink.exceptions.DescriptorException
Exception Description: The attribute [teams] is declared as type ValueHolderIn
terface, but its mapping does not use indirection.
Mapping: oracle.toplink.mappings.ManyToManyMapping[teams]
Descriptor: Descriptor(com.test.Users --> [DatabaseTable(USERS)])
Exception [TOPLINK-7] (OracleAS TopLink - 10g (9.0.4.2) (Build 040311)): oracle.
toplink.exceptions.DescriptorException
Exception Description: The attribute [teams] should be of type Vector (or a ty
pe that implements Map or Collection, if using Java 2).
Mapping: oracle.toplink.mappings.ManyToManyMapping[teams]
Descriptor: Descriptor(com.test.Users --> [DatabaseTable(USERS)])
Exception [TOPLINK-2] (OracleAS TopLink - 10g (9.0.4.2) (Build 040311)): oracle.
toplink.exceptions.DescriptorException
Exception Description: The attribute [users] is declared as type ValueHolderIn
terface, but its mapping does not use indirection.
Mapping: oracle.toplink.mappings.ManyToManyMapping[users]
Descriptor: Descriptor(com.test.Teams --> [DatabaseTable(TEAMS)])
Exception [TOPLINK-7] (OracleAS TopLink - 10g (9.0.4.2) (Build 040311)): oracle.
toplink.exceptions.DescriptorException
Exception Description: The attribute [users] should be of type Vector (or a ty
pe that implements Map or Collection, if using Java 2).
Mapping: oracle.toplink.mappings.ManyToManyMapping[users]
Descriptor: Descriptor(com.test.Teams --> [DatabaseTable(TEAMS)])
Exception [TOPLINK-163] (OracleAS TopLink - 10g (9.0.4.2) (Build 040311)): oracl
e.toplink.exceptions.DescriptorException
Exception Description: This mapping's attribute class does not match the collect
ion class. [class java.util.Vector] cannot be assigned to [interface oracle.top
link.indirection.ValueHolderInterface].
Please help me out to resolve this problem.Either use indirection in your mappings, or change you class to just use a normal collection, not a ValueHolderInterface.
-- James : http://www.eclipselink.org -
Create a counter(in a query) by how many unique items are in a document num
Hi,
Is there a way for me to create a counter(in a query) by how many unique items are in a document number?
If you look at the bold amounts below they have two unique item numbers 3 & 11. Because of that data is being duplicated in the InfoSet. The Subtotal needs to be 13500 instead of 27000. The two subtotals above are correct. I was thinking if I can create a create a counter(in a query) by how many unique items are in a document number (in this case it would be 2). And then if i divide Quantity by that counter, i shall get the correct value of 13500.
How can i do this?
Thanks
Doc Num Item # Quantity
5900001759 11 2,700
5900001759 11 5,400
5900001759 11 2,700
5900001759 11 2,700
5900001759 13,500
5900001890 7 2,700
5900001890 7 5,400
5900001890 7 2,700
5900001890 7 2,700
5900001890 13,500
5900002176 3 2,700
5900002176 11 2,700
5900002176 3 5,400
5900002176 11 5,400
5900002176 3 2,700
5900002176 11 2,700
5900002176 3 2,700
5900002176 11 2,700
5900002176 27,000
54,000Create a New Calculated Key Figure
From the context menu for the Formula Variable, choose New Variable
Choose the Processing type as Replacement Path
In the next screen, select the Characteristic Info Object based on which the number of documents is to be displayed in the report (For example: Document Number / Order Number).
Choose Next.
In the Replace Variable with drop down box, choose Attribute Value.
In the Attribute drop down, select Characteristic Reference (Constant 1).
Choose Next.
On the Save Variable page, an overview of the settings made for the variable will be displayed.
Confirm the entries and Choose Finish.
Open the formula variables directory and use Drag & Drop to transfer the formula variable
To avoid the warning message, the formula variable is multiplied by 1
The most important step here is to set the Time of Calculation to After Aggregation in the KF properties.
(by Default the Time of Calculation is set to After Aggregation)
The new calculated key figure is available under Calculated Key Figure in the Key Figure directory, and can be included in the query definition using Drag & Drop.
Hope this help
Rgds
Maybe you are looking for
-
Hi... I have the factory unlock iPhone 4 which i bought in China... And next winter holiday i'm going to back to my country because i just study in China... Can i use my iPhone in my country? Is it only unlock to chinese providers or to all providers
-
HT1339 where is the restore button on itunes
i went on itunes but there is no restore button and i dont know how to connect my ipod cause it says its locked
-
Using a Sony HXR-MC50U Camcorder and can't seem to figure out if there is a way to display the audio levels on the LCD display as you are recording.
-
Unable to connect to the Oracle BAM services.
Hi All , I am unable to open BAM Start page... while Starting BAM Service The Oracle BAM Active Data Cache service could not be started. found below error in ReportCache.log 2009-04-23 17:29:19,093 [7616] ERROR - ReportCache ReportCacheServer.GetChan
-
Dear Sapgurus, Kindly guide me on the following issue.Its very very urgent as the work has been held due to this. Number range does not exist for equipment. Diagnosis. No equipment number ranges have been created. Procedure Create the n