title: Spring Data REST and IdClass - not compatible?
body: <p>I am trying to use Spring Data REST with a given SQL schema, which uses the JPA @IdClass annotation for associative tables (intersection table, or many-to-many resolution table). These mapping entities do not get serialized properly.</p>
  
  <p>I created a small project, that illustrates the problem. It's a fork of spring-data-examples, and pretty straightforward. It is using eclipselink, but I already tested it with Hibernate and the problem  is the same.</p>
  
  <p><a href="https://github.com/otrosien/spring-data-examples/tree/idClassFailureWithSerializable" rel="nofollow">https://github.com/otrosien/spring-data-examples/tree/idClassFailureWithSerializable</a></p>
  
  <p>The setup:
  2 entities: Customer and Relationship, 2 repositories: CustomerRepository, RelationshipRepository, both extend CrudRepository</p>
  
  <p>Customer has a generated Id, and firstname, lastname as String.
  Relationship has the IdClass "RelationshipID" and customer1, customer2 as composite primary key, both having foreign key on Customer. Plus a relation string.</p>
  
  <p>A basic integration test shows the entities work as expected. </p>
  
  <pre><code>Customer dave = customers.save(new Customer("Dave", "Matthews"));
  Customer jack = customers.save(new Customer("Jack", "Johnson"));
  
  assertThat(customers.findOne(dave.getId()), is(dave));
  assertThat(customers.findOne(jack.getId()), is(jack));
  
  Relationship rel = relationships.save(new Relationship(dave, jack, "likes"));
  assertThat(relationships.findOne(rel.pk()), is(rel));
  </code></pre>
  
  <p>So far so good. Let's try this via REST API now.</p>
  
  <pre><code>POST http://localhost:8080/customers
  Content-Type: application/json
  
  {
    "lastname" :"Dave",
    "firstname":"Matthews"
  }
  
  POST http://localhost:8080/customers
  Content-Type: application/json
  
  {
    "lastname" :"Jack",
    "firstname":"Johnson"
  }
  
  POST http://localhost:8080/relationships
  Content-Type: application/json
  
  {
    "customer1" : "http://localhost:8080/customers/1",
    "customer2" : "http://localhost:8080/customers/2",
    "relation" : "likes"
  }
  </code></pre>
  
  <p>I always get a 201 Created, which is good. But the representation of the mapping entity looks broken. Instead of proper links they seem to be serialized objects.</p>
  
  <pre><code>GET /relationships
  
  200 OK
  {
    "_embedded" : {
      "relationships" : [ {
        "relation" : "likes",
        "_links" : {
          "self" : {
            "href" : "http://localhost:8080/relationships/Customer%20%5Bid=2,%20firstname=F,%20lastname=L%5D"
          },
          "customer1" : {
            "href" : "http://localhost:8080/relationships/Customer%20%5Bid=2,%20firstname=F,%20lastname=L%5D/customer1"
          },
          "customer2" : {
            "href" : "http://localhost:8080/relationships/Customer%20%5Bid=2,%20firstname=F,%20lastname=L%5D/customer2"
          }
        }
      } ]
    }
  }
  </code></pre>
  
  <p>Question: Has anyone succeeded in using Spring Data REST with mapping entities? Can you spot a mistake in the implementation? Or is it a bug? (I'm using spring boot 1.2.4.RELEASE with starter-data-rest and starter-data-jpa, which should all be the latest releases)</p>
  
  <p>Please, no suggestions to change the schema. I already know I can fix it by inserting a generated @Id into Relationship, but the schema is given as-is.</p>